经过测试只要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;
-
-
-
- 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;
- }
- }
- }
untiy AnimationEvent添加返回参数
- using UnityEngine;
- using System.Collections;
-
- public class Try : MonoBehaviour {
-
- public class Action : ScriptableObject
- {
- public Transform Att;
- public Transform Def;
- }
-
-
- void Start () {
- 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;
- animation.GetClip("ani").AddEvent(evt);
-
- Debug.Log(act.Att.gameObject.name);
- }
-
- public void Test(Action obj) {
- Action act = obj as Action;
- Debug.Log(act.Att.gameObject.name);
- }
- }
貌似参数传多少个,类型为int float object都可以
http://blog.csdn.NET/damenhanter/article/details/52561673