作为播放动画的一部分,AnimationEvent 可用于调用类似于 SendMessage 的脚本函数。
动画事件支持零个或一个参数的函数。 该参数可以是浮点、int、字符串、对象引用或 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 | Int 参数,保存在事件中并将发送函数。 |
isFiredByAnimator | 如果动画器组件已触发了该动画事件,则返回 true。 |
isFiredByLegacy | 如果动画组件已触发了该动画事件,则返回 true。 |
messageOptions | 函数调用选项。 |
objectReferenceParameter | 对象引用参数,保存在事件中并将发送到函数。 |
stringParameter | 字符串参数,保存在事件中并将发送到函数。 |
time | 将触发该事件的时间。 |
AnimationEvent | 创建新动画事件。 |