3.4.6 动画状态的设计与实现
动画状态(Anima)作为一个中转状态,有一个前置状态和一个后置状态。若在前置状态进入动画状态之前先设置好后置状态(在脚本中声明一个后置状态字段),则当动画播放结束时,游戏会跳转到后置状态。
游戏进入动画状态时可能有多个动画在播放,为了使游戏在最后一个动画播放结束时进入后置状态,需要一个计数器。该计数器的值在其他状态开始播放动画时将加1,当动画播放结束时,会调用AnimaPlayEnd方法使计数器的值减小;当计数器的值为0时,说明所有动画播放结束,可以跳转到后置状态。相关代码如下。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
在该游戏中,使用了两种动画:一种是Unity自带的帧动画,另一种是DOTween缓动动画。要使动画播放结束时调用AnimaPlayEnd方法,需要注册对应的事件。
Unity自带的帧动画需要在动画窗口(Animation)中设置对应的帧事件。该游戏需要在所有删除糖果动画预制体(游戏物体Effect01~Effect06)的动画中添加帧事件。
(1)在菜单栏中执行“Window->Animation->Animation”命令,打开动画窗口(Animation),然后打开删除糖果的动画预制体,选中最后一个动画帧,添加帧事件,如图3-21所示。
图3-21
(2)单击动画帧上的帧事件节点,在检视窗口(Inspector)中将Function设为End(),如图3-22所示。
图3-22
DOTween 动画需要在动画代码中添加动画结束触发事件,下列代码是该项目中使用这一操作的例子。
代码位置:见源代码目录下Assets\Scripts\GameManager.cs。
本节简单介绍了动画状态的设计与实现,后文中仍然会出现与动画状态相关的内容。上面的代码省略了声明字段和对字段赋值的代码,如有需要请读者自行翻阅本实例的源代码。