AnimationEvent 允许您像 SendMessage 一样在动画回放期间调用脚本函数。
动画事件支持接受零个或一个参数的函数。参数可以是浮点数、整数、字符串、对象引用或 AnimationEvent。
// Animation Event example // Small example that can be called on each specified frame. // The code is executed once per animation loop.
using UnityEngine; using System.Collections;
public class Example : MonoBehaviour { public void PrintEvent() { Debug.Log("PrintEvent"); } }
下面是一个更详细的示例,展示了一种更复杂创建动画的方法。在本脚本示例中,访问了 Animator
组件并获取了其中的 Clip
。(此剪辑是在 Animation 窗口中设置的。)剪辑持续 2 秒。创建了一个 AnimationEvent
,并设置了参数。参数包括函数 PrintEvent()
,该函数将处理事件。然后将该事件添加到剪辑中。所有这些操作都在 Start()
中完成。游戏启动后,事件会在 1.3 秒后调用,然后每隔 2 秒重复一次。
// Add an Animation Event to a GameObject that has an Animator using UnityEngine; using System.Collections;
public class Example : MonoBehaviour { public void Start() { // existing components on the GameObject AnimationClip clip; Animator anim;
// new event created AnimationEvent evt; evt = new AnimationEvent();
// put some parameters on the AnimationEvent // - call the function called PrintEvent() // - the animation on this object lasts 2 seconds // and the new animation created here is // set up to happen 1.3s into the animation evt.intParameter = 12345; evt.time = 1.3f; evt.functionName = "PrintEvent";
// get the animation clip and add the AnimationEvent anim = GetComponent<Animator>(); clip = anim.runtimeAnimatorController.animationClips[0]; clip.AddEvent(evt); }
// the function to be called as an event public void PrintEvent(int i) { print("PrintEvent: " + i + " called at: " + Time.time); } }
animationState | 触发此事件的动画状态(只读)。 |
animatorClipInfo | 与此事件相关的动画剪辑信息(只读)。 |
animatorStateInfo | 与此事件相关的动画状态信息(只读)。 |
floatParameter | 存储在事件中的浮点数参数,将发送到函数。 |
functionName | 将要调用的函数的名称。 |
intParameter | 存储在事件中的整数参数,将发送到函数。 |
isFiredByAnimator | 如果此 Animation 事件由 Animator 组件触发,则返回 true。 |
isFiredByLegacy | 如果此 Animation 事件由 Animation 组件触发,则返回 true。 |
messageOptions | 函数调用选项。 |
objectReferenceParameter | 存储在事件中的对象引用参数,将发送到函数。 |
stringParameter | 存储在事件中的字符串参数,将发送到函数。 |
time | 触发事件的时间。 |
AnimationEvent | 创建一个新的动画事件。 |