话不多说,先上视频


动画事件控制器


这只是我喜欢的一种解决方案,如果诸位大佬有更好的解决方式,欢迎留言评论,如果这个解决方案有不对的地方,敬请大家指出。还是那句话没有最好的解决方案,只有最适合的解决方案。

1.为什么要写这个脚本

Unity提供了向动画片段添加事件的方式与方法,但是有一个局限,那就是带有方法的脚本必须添加到具有Animator组件的游戏物体上。如果场景中有很多动画需要使用事件,那就意味着每个物体都需要添加一个这样的脚本,这样管理起来就会很乱;于是就产生了一个想法,如果只用一个脚本控制这些动画器的事件就好了。

2.解决方案

解决方案一:获取Animator,获取动画剪辑片段,判断动画播放到一定时间执行事件。

这确实是一种解决方式,但是既然Unity给我们提供了 动画事件,为什么我们还要自己去获取再判断呢?

所以由此产生了方案二:

如下;

1.创建一个空物体,添加 AnimationEventController 这个脚本(图1)

2.将需要注册动画事件的Animator添加到Anim这个接口,Anim 这个地方如果为空就会获取一下自身是否具有Animator,如果有,后续的动画事件就会注册到自身上。(图1)

unity 动态切换动画控制器_unity 动态切换动画控制器

                                                                        (图1)

3.这个位置可以添加动画 事件的具体行为  ,其中CountRun就是当动画播放了几次才能触发这个事件。(图2)

unity 动态切换动画控制器_解决方案_02

                                                                        (图2)

4.其中事件引用序号 指的是  在当前帧动画中添加  Animator Event IDs 中的哪个事件,如Element0、Element1、Element...  其中事件引用序号==几  ,添加的事件就是 Element几,

在RemoveEvent右侧就是移除哪个事件的序号,注意移除这个,不会清除Animator Event IDs中的事件,而是不会再把事件添加到Animator中Clip的关键帧中了。

!!!注意红框中的数据只有在激活动画编辑器的时候才会显示出来。

unity 动态切换动画控制器_unity 动态切换动画控制器_03