MIF_E31222398/Assets/Script/State Machine/PlayOneShotBehaviour.cs

49 lines
1.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayOneShotBehaviour : StateMachineBehaviour
{
public AudioClip soundToPlay;
public float volume = 1f;
public bool playOnEnter = true, playOnExit = false, playAfterDelay = true;
// Delayed sound timer
public float playDelay = 0.25f;
private float timeSinceEntered = 0;
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)
{
AudioSource.PlayClipAtPoint(soundToPlay, animator.gameObject.transform.position, volume);
}
}
// 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)
{
AudioSource.PlayClipAtPoint(soundToPlay, animator.gameObject.transform.position, volume);
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)
{
AudioSource.PlayClipAtPoint(soundToPlay, animator.gameObject.transform.position, volume);
}
}
}