unity 代码添加AnimationEvent

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


posted @ 2017-03-02 17:47  00000000O  阅读(920)  评论(0)    收藏  举报