RandomChangeAnimState.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class RandomChangeAnimState : StateMachineBehaviour
  5. {
  6. public float min;
  7. public float max;
  8. public int[] stateHashNames;
  9. private float m_ChangeAnim;
  10. private bool m_Changing = false;
  11. // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
  12. override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  13. {
  14. m_ChangeAnim = Time.realtimeSinceStartup + Random.Range(min, max);
  15. m_Changing = true;
  16. }
  17. // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
  18. override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  19. {
  20. if (m_Changing && m_ChangeAnim <= Time.realtimeSinceStartup)
  21. {
  22. int index = Random.Range(0, stateHashNames.Length);
  23. animator.CrossFade(stateHashNames[index], 0.2f);
  24. m_Changing = false;
  25. }
  26. }
  27. // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
  28. override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  29. {
  30. }
  31. // OnStateMove is called right after Animator.OnAnimatorMove()
  32. //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  33. //{
  34. // // Implement code that processes and affects root motion
  35. //}
  36. // OnStateIK is called right after Animator.OnAnimatorIK()
  37. //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  38. //{
  39. // // Implement code that sets up animation IK (inverse kinematics)
  40. //}
  41. }