using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayOneShotBehaviour : StateMachineBehaviour { public string audioClipName; public bool playOnEnter = true, playOnExit = false, playAfterDelay = false; // Delayed sound timer public float playDelay = 0.25f; private float timeSinceEntered = 0f; private bool hasDelayedSoundPlayed = false; //OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (playOnEnter) { SoundManager.instance.PlaySoundAtPoint(animator.gameObject, audioClipName); } } //OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (playAfterDelay && !hasDelayedSoundPlayed) { timeSinceEntered += Time.deltaTime; if (timeSinceEntered > playDelay) { SoundManager.instance.PlaySoundAtPoint(animator.gameObject, audioClipName); hasDelayedSoundPlayed = true; } } } //OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (playOnExit) { SoundManager.instance.PlaySoundAtPoint(animator.gameObject, audioClipName); } } }