在游戏中一个角色往往拥有多个动画,比如在空闲状态时微微喘息,在接受指令后开始走动或者从高空处坠落时举起双手,通过脚本控制这些动画状态的切换和过度通常是一项非常重要的复杂工作,Mecanim系统就借用了计算机科学中的状态机概念来简化对角色动画的控制
1.状态机基础
状态机的基本思想是使角色在某一给定时刻进行一个特定的动作,动作类型可因游戏类型的不同而不同,通用的动作包含空闲,走路,跑步和跳跃等,其中每一个动作称为一种状态(States),一般来说,角色从一个状态立即切换到另外一个状态时需要一些一定的限制条件的,比如角色状态只能从跑步状态切换到跳跃状态,而不能直接静止状态切换到跑跳状态,上述的限制条件被称为状态过度条件(States transition)。总之 状态集合,状态过度条件以及记录当前状态的变量放在一起,就组成了一个最简单的状态机。
状态以及过度条件可以通过图示来表达,其中的节点表示状态,节点间的箭头表示状态的过度,状态机对于动画的重要意义在用于可以通过很少的代码对状态机记性设计和升级,从而让动画师方便的定义动作顺序,而不必关心底层代码的实现。
2.Mecanim状态机
Mecanim动画状态机提供了一种纵览角色所有动画片段的方法,并且准许通过游戏中的各种组件(例如用户输入)来触发不同的动画效果,动画状态机可以通过animator controller试图来创建,一般而言,动画状态机包含动画状态,动画过度和动画事件,而复杂的状态机还有简单的子状态机。
3.animation States(动画状态)
Animation stares是动画状态机中的基本组件模型,每个动画状态含有一个单独的动画序列(或者混合数),当某一游戏事件就触发了一个动画状态中,当在animator controller中选择了一个动画状态时,就能在inspector面板中查看到他的属性,其中:
Speed:动画的速度
Motion:当前状态下的动画片段
Foot 1K:是否使用foot 1K
Transitions:由当前状态发出的过度条件列表
以黄色显示的是动画状态机中默认的状态,它是指状态机被首次激活所进入的状态,可以再其他的状态上右击并选择set as default来改变默认的状态,每个状态右侧的solo和mute选择框用于控制动画在预览时的行为表现。
为了添加新的动画状态,可以在animator controller试图的空白处右击create-States-empty,此外,也可以将一段动画拖入到animator controller视图中,从而创建一个包含该动画片段的动画状态。
4.