在创建Unity的游戏动画的时候,我们还可以通过添加动画事件的方式来实现,在动画的过程中调用脚本的代码来进行一些操作。

    动画剪辑中可以添加动画事件,使你在时间轴特定的帧调用脚本中的函数。动画事件调用函数时,可以用一个参数。参数可以是float,string,应用对象,或者动画事件对象。函数被调用时,动画事件对象可以将float,string,integer和引用对象等,这些成员变量全部传递给函数。

    下面我们来看一下怎么实现动画事件,实例的场景是一个简单的爆炸动画效果。

    首先我们先创建一个精灵,给精灵添加动画,如图所示:

unity timeline 动画切换镜头过度_调用函数

    创建脚本如下所示:

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”的按钮,如图所示:

unity timeline 动画切换镜头过度_事件对象_02

    点击“Add Animation Event”的按钮可以进入添加动画事件的弹出窗口,该窗口会自动把脚本适用于动画事件的函数都给带出来,如图所示:

unity timeline 动画切换镜头过度_时间轴_03

    添加之后,动画执行到这个时间点上就会执行脚本的动画事件。添加效果的面板如下所示:

unity timeline 动画切换镜头过度_时间轴_04