经过测试只要Animator跟继承monoBehaviour的类A在同一个节点上,就可以注册类A中的public 方法,含0或1个参数(int,float,object,string),注意:只能是0或1个参数
using UnityEngine; class TAnimEvent:MonoBehaviour { [SerializeField] private Animator mAnimator; public bool abc; void Start() { mAnimator = this.GetComponent<Animator>(); RuntimeAnimatorController m_runtimeAnimatorController = this.GetComponent<Animator>().runtimeAnimatorController; AnimationEvent newEvent = new AnimationEvent(); newEvent.functionName = "Print"; newEvent.time = 0.0f; newEvent.intParameter = 9; //newEvent.floatParameter = 9.0f; AnimationClip[] clips = m_runtimeAnimatorController.animationClips; for (int i = 0; i < clips.Length; i++) { Debug.Log("Nafio -------!!"); if (clips [i].name == "Fuck") { Debug.Log("Nafio find TAnim!!"); m_runtimeAnimatorController.animationClips[i].AddEvent(newEvent);; } } mAnimator.Rebind(); } void Print(int a) { Debug.Log ("Nafio---PrintEvent!!! a:"+a); } }
AnimatorStateInfo currentState = animator.GetCurrentAnimatorStateInfo(0); if (currentState.nameHash == Animator.StringToHash("Base Layer.Idle")) { if (!hasSet) { Action act = new Action(); act.Att = this.transform; act.Def = this.transform; AnimationEvent evt = new AnimationEvent(); evt.time = 0; evt.functionName = "Test"; evt.objectReferenceParameter = act as Object; AnimationInfo[] info = animator.GetCurrentAnimationClipState(0); foreach (AnimationInfo i in info) { i.clip.AddEvent(evt); hasSet = true; } } }