需求分析: Unity中在人物播放某个动画时往往伴随着动画音效的播放,或则是人物打击的粒子特效播放。
- 解决方案一:早期这种需求的处理方案是在Animatio(Ctrl 6)动画中添加Event事件,然后填写注册的方法名,Unity会在挂载该动画的物体上查找该方法,在动画播放到定义事件的那一帧时,会执行该方法,我们通常将动画播放的音效或则粒子特效在该方法中实现,不过Unity5之后,这个方法就不好用了,这些事件被Unity官方定义成了一系列的系统事件,不能够自定义使用了。
- 解决方案二:其实我们要实现上述需求还可以使用StateMachineBehaviour,通过定义一个类继承自StateMachineBehaviour并重写其中的方法,如:OnStateEnter(动画进入该状态时使用),OnStateExit(动画离开该状态时使用),OnStateUpdate(动画在该状态每一帧调用)等等。 这里我们使用解决方案二举例,Unity版本使用的是Unity2018.3.14版本,在人物疾跑状态下实现人物残影。 这里放上实现的效果图:
实现方法
创建RunBehaviour脚本继承自StateMachineBehaviour并重写其中的 OnStateEnter,OnStateExit,OnStateUpdate方法;在此脚本中实现人物疾跑状态下的残影,之后将脚本挂载Animator Controller中的Run动画状态上