// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik // #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value. using UnityEngine; namespace Animancer.Samples.Events { /// Uses Animancer Events to play a sound randomly selected from an array. /// /// /// Sample: /// /// Footstep Events /// /// /// https://kybernetik.com.au/animancer/api/Animancer.Samples.Events/FootstepEvents /// [AddComponentMenu(Strings.SamplesMenuPrefix + "Footstep Events - Footstep Events")] [AnimancerHelpUrl(typeof(FootstepEvents))] public class FootstepEvents : MonoBehaviour { /************************************************************************************************************************/ #if UNITY_AUDIO /************************************************************************************************************************/ [SerializeField] private AnimancerComponent _Animancer; [SerializeField] private StringAsset _EventName; [SerializeField, Range(0, 1)] private float _PitchRandomization = 0.2f; [SerializeField] private AudioClip[] _Sounds; /************************************************************************************************************************/ protected virtual void Awake() { _Animancer.Events.AddTo(_EventName, PlaySound); } /************************************************************************************************************************/ private void PlaySound(AudioSource source) { source.clip = _Sounds[Random.Range(0, _Sounds.Length)]; source.pitch = Random.Range(1 - _PitchRandomization, 1 + _PitchRandomization); source.volume = AnimancerEvent.Current.State.Weight; source.Play(); // Create a sphere on the foot to show where the sound is coming from. GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); Transform transform = sphere.transform; transform.parent = source.transform; transform.localPosition = Vector3.zero; transform.localScale = Vector3.one * 0.2f; Destroy(sphere, 0.1f);// Destroy after 0.1 seconds. } /************************************************************************************************************************/ #else /************************************************************************************************************************/ protected virtual void Awake() { SampleReadMe.LogMissingAudioModuleError(this); } /************************************************************************************************************************/ #endif /************************************************************************************************************************/ } }