AnimationEvent 动画事件

描述:

AnimationEvent类似于SendMessage让你调用一个脚本函数,这个脚本是动画播放的一部分

动画事件函数支持0参数或一个参数,参数可以是浮点型,字符串,object或AnimationEvent。

变量说明
animationState该事件引发的动画状态(只读)。当该方法在动画事件回调之外被调用时,返回null。注意,该成员从动画组件(旧版)调用时,仅能设置。
animatorClipInfo与此事件有关的动画器剪辑信息(只读)。
animatorStateInfo有关该事件的动画器状态信息(只读)。
floatParameter浮点型参数,储存在该事件中并发送给函数。
functionName被调用的函数的名称。这与调用gameObject.SendMessage(animationEvent.functionName, animationEvent)相同
intParameter整数型参数,储存在事件中并发送给函数。
isFiredByAnimator如果该动画事件已经由Animator组件触发,返回true。
isFiredByLegacy如果该动画事件已经由Animation组件触发,返回true。
messageOptions函数调用选项。如果选项设置为 SendMessageOptions.RequireReceiver (默认),当消息没有被任何组件接收时打印一个错误信息.
objectReferenceParameter储存在事件中的引用对象参数,并发送给函数。
stringParameter储存在该事件中的字符串参数,并发送给函数。
time引发该事件的时间点。

示例:

  1. // Add an Animation Event to a GameObject that has an Animator
  2. using UnityEngine;
  3. using System.Collections;
  4. public class Example : MonoBehaviour {
  5. public void Start()
  6. {
  7. // existing components on the GameObject
  8. AnimationClip clip;
  9. Animator anim;
  10. // new event created
  11. AnimationEvent evt = new AnimationEvent();
  12. // put some parameters on the AnimationEvent
  13. // - call the function called PrintEvent()
  14. // - the animation on this object lasts 2 seconds
  15. // and the new animation created here is
  16. // set up to happens 1.3s into the animation
  17. evt.intParameter = 12345;
  18. evt.time = 1.3f;
  19. evt.functionName = "PrintEvent";
  20. // get the animation clip and add the AnimationEvent
  21. anim = GetComponent<Animator>();
  22. clip = anim.runtimeAnimatorController.animationClips[0];
  23. clip.AddEvent(evt);
  24. }
  25. // the function to be called as an event
  26. public void PrintEvent(int i) {
  27. print("PrintEvent: " + i + " called at: " + Time.time);
  28. }
  29. }

?