1、状态机
基本思想是角色在任何给定时间忙于一些特殊的动作。可用的动作取决于游戏类型,但典型动作包括空闲、走路、跑步、跳跃等。这些动作称为状态,在场景中,角色处于走路、空闲等“状态”。通常,角色要进入另一种状况会受到限制,而不是可以直接从任何状态转换成任何其他状态。例如,跑跳仅在角色已经在跑步时而非停滞不前时实现,所以永远无法直接从空闲状态转换成跑跳状态。角色可从当前状态进入下一个状态的选型称为状态转换。总之,状态集、转换集和记住当前状态的变量形成了状态机。
状态机的状态和转换可用一个图解表示,其中节点代表状态,弧(节点之间的箭头)代表转换。您可以把当前状态看作一个标记或置于一个节点上的突出显示,然后只需沿着一条箭头跳转到另一个节点。
动画状态机的价值在于可以用相对较少的编码即可轻松设计和更新。每个状态有一个与之相关的动作 (Motion),并在机器处于该状态时播放。这样就使动画器或设计器能够定义角色动作和动画的可能顺序,无需担心代码如何工作。
状态机 (State Machines) 包含状态 (States)、转换 (Transitions) 和事件 (Events),较小的子状态机 (Sub-State Machines) 可在较大的机器中用作组件。
2、动画状态
动画状态 (Animation State) 是 动画状态机 (Animation State Machine)的基本构造块。每个状态包含将在角色处于该状态时播放的单独动画序列(或混合树 (blend tree))。游戏中的事件触发状态转换时,角色会保留为新状态,该状态的动画序列随后会接管播放。
我们可以在Animator界面空白处右键->Create State -> Empty State 创建一个空的状态,再指定动作。
或者我们也可以直接拖拽一个动作到界面上直接生成对应的状态。如下图
单击某个状态,可以在右侧看到状态的属性。如下图
Speed:表示动画的默认速度
Motion:分配给改状态的动画片段
Foot IK:是否对此状态应用到Foot IK
Mirror:作为动画镜像使用
Translations:该状态的转换列表。这边显示了一个转换。
右击某个状态,选择Set As Default ,改状态图标将显示棕黄色。意味着是状态机第一个激活时播放的状态。
任意状态是一种始终存在的特殊状态,可以作为一个转换的起始点,快速转换到需要转换到的目标状态。任意状态不能作为转换的终点。
3、状态转换
在某个状态上右键选择Make Transform 可以增加一个状态转换。两个状态之间会有一个连接线。点击连接线,如下图所示
启用Solo表示从该状态进行的其余转换将不能使用。
启用Mute表示禁用改转换。
Atomic 表示是否启用原子转换。启用表示无法中断转换。
下面的是状态转换之间的融合情况。
Conditions用于控制在什么时候进行状态转换。
Exit Time 表示退出时间,0.88表示idle动画播放了88%的时候进行状态转换。
4、动画参数
动画参数可以在Animator界面的左下角的参数(Parameters)进行设置。如下图
参数有四种基本类型。Float、Int、Bool和Trigger。
对应函数分别是SetFloat、SetInt、SetBool、SetTrigger。
在完成参数的增加后,便可以在状态转换中使用。
如,参数isRun是Bool型。
那么在状态run->状态idle时,可以在转换的Conditions进行如下配置。
而在状态idle->状态run时,可以在转换的Conditions进行如下配置。