Version: 2022.3

AnimationEvent

class in UnityEngine

切换到手册

描述

作为播放动画的一部分,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将调用的函数的名称。
intParameterInt 参数,保存在事件中并将发送函数。
isFiredByAnimator如果动画器组件已触发了该动画事件,则返回 true。
isFiredByLegacy如果动画组件已触发了该动画事件,则返回 true。
messageOptions函数调用选项。
objectReferenceParameter对象引用参数,保存在事件中并将发送到函数。
stringParameter字符串参数,保存在事件中并将发送到函数。
time将触发该事件的时间。

构造函数

AnimationEvent创建新动画事件。