Unity功能点---Unity动画的事件(在任一帧添加关联事件)

当我们需要在动画播放到某一帧的时候同时发生一个事件,比如对人物造成伤害,或者使某些物体隐藏出现等,我们可以通过动画时长来计算帧数,然后在某个动画的某个时间进行事件的触发,这种方法通常可能会使事件不能完全对上某一帧,我们可以直接通过编辑动画在动画帧上添加事件来完成我们需要的功能。

我们在Unity里面编辑的动画可以直接在动画编辑界面处理添加事件的方法,通过外部导入的动画通常是只读的,需要找到动画点击Editor编辑并且手动输入事件方法,做个演示:

首先是Unity制作的动画,我在一个Player身上创建了一个动画(选中Player---Windows---Animation),如下:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第1张图片

这是一个简单的移动动画,在动画起始和动画结束分别添加了事件,点击到对应的事件会出现这样的面板:

可以看到没有方法进行选择,我们写个脚本挂在Player上面。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimEvent : MonoBehaviour {

    public void PlayerAnim(string s)
    {
        Debug.Log(s);
    }
}

我们再次选中事件,选择方法:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第2张图片

可以看到我们刚才的方法,选择方法并输入对应的参数。

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第3张图片Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第4张图片

先放着不看效果,我们看导入的外部动画;

通过Unity自带的Animation打开:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第5张图片

可以看到没有办法编辑。我们点击动画的Inspector面板的Editor:

展开效果:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第6张图片

我们拖动到最后面添加一个事件:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第7张图片

可以看到添加事件自动添加可一个名字叫NewEvent的方法,下面有四个类型的参数,我们来修改它:添加一个脚本到这个动画物体上:

using System.Collections.Generic;
using UnityEngine;

public class PangXieAnimEnvent : MonoBehaviour {

    public GameObject Player;

    public void PangXieAnim(int i)
    {
        Debug.Log(i);
        Player.SetActive(true);
    }

}

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第8张图片这个事件的作用就是动画完成后做一个自定义的打印,并且使Player出现,然后Player会播放自身的动画和事件。

再次打开动画编辑,点击事件,把方法名改成脚本的方法名并且在Int参数栏填入参数:

看下演示效果:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第9张图片

 

另外,如果我们不是选中Player而是选中Player的动画,在通过Window---Animation打开动画编辑然后选中事件会看到这样的界面:

Unity功能点---Unity动画的事件(在任一帧添加关联事件)_第10张图片可以看到之前配置好的事件,当然也可以在这里直接做修改,就不做演示了。

欢迎加群:4364930讨论。

你可能感兴趣的:(Unity,功能点)