unity 代码添加AnimationEvent

来源:互联网 发布:手机健身软件 编辑:程序博客网 时间:2024/05/24 04:17

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


0 0
原创粉丝点击