[Unity2D]动画事件Animation Events
在创建Unity的游戏动画的时候,我们还可以通过添加动画事件的方式来实现,在动画的过程中调用脚本的代码来进行一些操作。
动画剪辑中可以添加动画事件,使你在时间轴特定的帧调用脚本中的函数。动画事件调用函数时,可以用一个参数。参数可以是float,string,应用对象,或者动画事件对象。函数被调用时,动画事件对象可以将float,string,integer和引用对象等,这些成员变量全部传递给函数。
下面我们来看一下怎么实现动画事件,实例的场景是一个简单的爆炸动画效果。
首先我们先创建一个精灵,给精灵添加动画,如图所示:
创建脚本如下所示:
using UnityEngine; using System.Collections; public class Destroyer : MonoBehaviour { public bool destroyOnAwake; // 是否在激活的时候销毁对象 public float awakeDestroyDelay; // 销毁对象的延时时间 public bool findChild = false; // 是否查找子对象并且销毁掉 public string namedChild; //子对象名字 void Awake () { // 是否在激活的时候销毁子对象 if(destroyOnAwake) { // 有子对象 if(findChild) { // 找到自对象,再销毁,transform表示是当前的物体的子对象的集合 Destroy (transform.Find(namedChild).gameObject); } else { // 延时销毁当前的物体 Destroy(gameObject, awakeDestroyDelay); } } } // 销毁子对象函数,可以被动画事件调用 void DestroyChildGameObject () { if(transform.Find(namedChild).gameObject != null) Destroy (transform.Find(namedChild).gameObject); } // 设置子对象不可用,可以被动画事件调用 void DisableChildGameObject () { if(transform.Find(namedChild).gameObject.activeSelf == true) transform.Find(namedChild).gameObject.SetActive(false); } // 销毁游戏对象函数,可以被动画事件调用 void DestroyGameObject () { Destroy (gameObject); } }
在脚本上面定义了3个函数是可以作为动画事件来调用的,下面看看怎么在动画剪接中添加动画事件。
把鼠标移到时间轴上,右键就可以看到弹出的“Add Animation Event”的按钮,如图所示:
点击“Add Animation Event”的按钮可以进入添加动画事件的弹出窗口,该窗口会自动把脚本适用于动画事件的函数都给带出来,如图所示:
添加之后,动画执行到这个时间点上就会执行脚本的动画事件。添加效果的面板如下所示: