方法一(强力推荐):
在动画结束帧或其他帧处加个动画事件,在播放到这一帧的时候会自动调用这个动画函数
如图,找到对应动画的inspector面板,在里面有个Events下拉条,下拉后在想要的帧的位置添加事件函数,函数名字自己取,并且记得在使用这个动画的物体下面挂载的脚本里面写好这个函数的实现代码,object关联这个写了事件函数的脚本。
如:Function:attackhalfevent
Object:enemy.cs
在敌人节点下的enemy脚本里面添加函数
public void attackhalfevent() { Debug.Log("event message: attck half!"); }
方法二(道听途说):
试试animator上面那个 exit time
方法三(有时有用):
使用动画状态的归一化时间判断,注意,这个方法一般是用来做动画的切换,不能写一些逻辑语句在动画播放完成后执行,因为我测试过,一个动画播放完成后,会调用二十几次if里面的语句。
void Update () { AnimatorStateInfo info = anim.GetCurrentAnimatorStateInfo(0); // 判断动画是否播放完成 if (info.normalizedTime >= 1.0f && info.IsName("Base Layer.hurt"))//当前hurt动画是否播放完成,完成调用下面语句 { this.anim.SetInteger("anim_state", 0);//设置参数anim_state的值为0,我们之前也设置了当它等于0的时候会跳转 } }