在创建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”的按钮可以进入添加动画事件的弹出窗口,该窗口会自动把脚本适用于动画事件的函数都给带出来,如图所示:
添加之后,动画执行到这个时间点上就会执行脚本的动画事件。添加效果的面板如下所示: