作为播放动画的一部分,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 happens 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 | 创建新动画事件。 |