经过测试只要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;
}
}
}