分类:Unity、C#、VS2015 浏览器
建立日期:2016-05-02 工具
导入角色网格和动画及设置 Avatar 以后,就能够准备开始在游戏中使用它们了。如下部分涵盖 Mecanim 提供的、用于控制及排序动画的主要功能。 oop
使用动画的一个常见操做是确保动画正确循环。例如,表示走路循环的动画片断以相似的姿式开始、结束很是重要(如开始时左脚在地面上,结束时右脚在地面上),这样才能确保不会出现脚滑动或奇怪的不稳定动做。Mecanim为解决此问题提供了方便的工具,让动画片断可基于姿式、旋转和位置进行循环。 动画
一、相关属性 编码
(1)Start、End--开始和结束 设计
若是拖动动画片断的起始 (Start) 或结束 (End) 点,你就会看到全部参数的循环 (Looping) 拟合曲线(以可以循环的参数为基础)。若是将起始 (Start)、结束 (End) 标记放在绿色属性曲线的位置,那么就会增大片断正确循环的概率。 3d
(2)loop match--循环匹配 对象
循环匹配指示器(loop match)用于显示所选范围的循环情况。 blog
不是绿色的说明匹配不合适,其结果是动画播放时可能会形成重影(也叫“伪影”)。排序
(3)Loop Pose--循环姿式
若是循环匹配 (loop match) 指示器所有都变成了绿色,说明所启用的循环姿式 (Loop Pose)正确,这样动画播放时姿式循环就不会出现“伪影”。
二、动画组件(Animator Component)
任何具备 Avatar 的游戏对象 (GameObject) 都具备动画组件(Animaor),该组件是角色与其行为之间的连接。
动画组件引用动画控制器 (Animator Controller),该控制器用于对角色进行行为设置。包括经过脚本控制的状态机 (State Machine)、混合树 (Blend Tree)和事件的设置。
相关属性以下:
三、动画控制器 (Animator Controller)
能够从 动画器控制器(Animator Controller) 视图【菜单: 窗口 (Window)> 动画器控制器 (Animator Controller)】查看和设置角色行为。
动画控制器 (Animator Controller)能够从 工程视图 (Project View) 【菜单: 建立 (Create) > 画器控制器 (Animator Controller)】进行建立。这会在磁盘上建立.controller资源 ,该资源文件在工程浏览器 (Project Browser)中用下面的图标显示:
进行状态机设置以后,能够在层次结构视图 (Hierarchy View) 中将控制器置于具备 Avatar 的任何角色的动画组件上。
动画控制器窗口 (Animator Controller Window)包括:
(1)动画层小组件 (Animation Layer Widget) (左上角,请参阅动画层?)
(2)事件参数小组件 (Event Parameters Widget) (左下角,请参阅动画参数?)
(3)状态机自己的可视化。
注意,动画器控制器窗口 (Animator Controller Window) 会始终显示最近选择的 .controller 资源中的状态机(与当前加载的场景无关)。
角色拥有几个对应于其在游戏中能够执行的不一样动做的不一样动画,这一点很是常见。例如,它可能在空闲时轻轻呼吸或摇摆,接受命令时走路,从平台坠落时恐慌地举起双臂。回放这些动画时进行控制多是很是复杂的脚本任务。Mecanim 借用一个称为状态机的计算机科学概念来简化角色动画的控制和排序。
一、状态机基本原理
基本思想是角色在任何给定时间忙于一些特殊的动做。可用的动做取决于游戏类型,但典型动做包括空闲、走路、跑步、跳跃等。这些动做称为状态,在场景中,角色处于走路、空闲等“状态”。一般,角色要进入另外一种情况会受到限制,而不是能够直接从任何状态转换成任何其余状态。例如,跑跳仅在角色已经在跑步时而非停滞不前时实现,因此永远没法直接从空闲状态转换成跑跳状态。角色可从当前状态进入下一个状态的选型称为状态转换。总之,状态集、转换集和记住当前状态的变量造成了状态机。
状态机的状态和转换可用一个图解表示,其中节点表明状态,弧(节点之间的箭头)表明转换。您能够把当前状态看做一个标记或置于一个节点上的突出显示,而后只需沿着一条箭头跳转到另外一个节点。
动画状态机的价值在于能够用相对较少的编码便可轻松设计和更新。每一个状态有一个与之相关的动做 (Motion),并在机器处于该状态时播放。这样就使动画器或设计器可以定义角色动做和动画的可能顺序,无需担忧代码如何工做。
二、Mecanim 状态机
Mecanim 的动画状态机 (Animation State Machines) 提供一种方式来概览与特殊角色相关的所有动画片断,让游戏中的各类事件(例如用户输入)触发不一样的动画。
可从动画器控制器窗口设置动画状态机 (Animation State Machines),以下所示:
状态机 (State Machines) 包含状态 (States)、转换 (Transitions) 和事件 (Events),较小的子状态机 (Sub-State Machines) 可在较大的机器中用做组件。
三、动画状态 (Animation State)
动画状态 (Animation State) 是 动画状态机 (Animation State Machine)的基本构造块。每一个状态包含将在角色处于该状态时播放的单独动画序列(或混合树 (blend tree))。游戏中的事件触发状态转换时,角色会保留为新状态,该状态的动画序列随后会接管播放。
相关属性以下:
速度 (Speed) 动画的默认速度
运动 (Motion) 分配给此状态的动画片断
脚 IK (Foot IK) 是否应对此状态考虑“脚 IK”(Foot IK)
转换 (Transitions) 源自此状态的转换的列表
默认状态(以棕色显示)是第一次激活时计算机所处的状态。必要时,能够经过右键单击另外一个状态并从上下文菜单中选择设为默认 (Set As Default) 来更改默认状态。每一个转换上的独奏 (solo) 和静音 (mute) 复选框用于控制动画预览行为 — 有关更多详细信息,请参阅此页面。
能够经过在动画器控制器窗口 (Animator Controller Window) 中右键单击空白空间并从上下文菜单中选择 建立状态 (Create State)->空 (Empty) ,来添加新状态。或者,能够将一个动画拖动到动画器控制器窗口 (Animator Controller Window) 中以建立包含该动画的状态。(请注意,只能将 Mecanim 动画拖动到控制器中 - 非 Mecanim 动画会被拒绝。)状态还能够包含混合树 (Blend Tree)。
任意状态 (Any State)
任意状态 (Any State) 是始终存在的特殊状态。该状态针对您要转变为特定状态(不管您当前处于何状态)的状况而存在。这是将相同向外转换添加到机器中全部状态的快速方法。请注意,任意状态 (Any State) 的特殊含义意味着它不能是转换的结束点(即,跳转到“任意状态”不能用做挑选下一次进入的随机状态的方式)。
四、动画转换 (Animation Transition)
动画转换 (Animation Transition) 定义从一个 动画状态 (Animation State) 在任何给定时间都只能有一个转换处于活动状态。
相关属性:
原子 (Atomic) 此转换是否为原子转换?(没法中断)
条件 (Conditions) 在此处决定触发转换的时间时间。.
还可使用退出时间Exit Time,而不使用参数,并指定表示源状态的规范化时间的数字(例如,0.95 表示在播放了 95% 的源片断内容时触发转换)。
参数值(若是须要):能够经过拖动重叠的开始值和结束值,来调整两个动画片断之间的转换。
游戏动画中的一个常见任务是在两个或更多类似运动之间混合。最佳的已知示例多是根据角色速度混合行走和奔跑动画。另外一个示例是角色在奔跑过程当中转弯时向左或向右倾斜。
重要的是区分转换 (Transition) 与混合树 (Blend Tree)。虽然二者都用于建立平滑动画,可是它们用于不一样类型的状况。
基本概念:
转换 (Transition):用于在给定时间量内从一个动画状态 (Animation State) 平滑转换为另外一个状态。转换指定为动画状态机 (Animation State Machine) 的一部分。若是转换迅速,则一般可从一个运动很好地转换为彻底不一样的运动。
混合树 (Blend Tree):用于容许经过按不一样程度组合全部动画的各个部分来平滑混合多个动画。各个运动参与造成最终效果的量使用混合参数进行控制,该参数只是与动画器控制器 (Animator Controller) 关联的数值动画参数之一。要使混合运动有意义,混合的运动必须具备类似性质和时间。混合树 (Blend Tree) 是动画器控制器 (Animator Controller) 中的特殊状态类型。
类似运动示例能够是各类行走和奔跑动画。要使混合工做良好,片断中的移动必须在相同的规范化时间点发生。例如,行走和奔跑动画能够对齐,以便脚与地面接触的时刻在相同的规范化时间点发生(例如,左脚在 0.0 踏地,而右脚在 0.5 踏地)。由于使用规范化时间,因此片断是否具备不一样长度可有可无。
要开始使用新混合树 (Blend Tree),须要:
右键单击动动画器控制器窗口 (Animator Controller Window)上的空白空间
从出现的上下文菜单中选择 建立状态 (Create State) > 重新混合树 (From New Blend Tree)。
双击混合树 (Blend Tree) 以进入混合树图 (Blend Tree Graph)。
动画器控制器窗口 (Animator Controller Window) 如今显示整个混合树 (Blend Tree) 的图形,而检视器 (Inspector) 显示当前选择的节点及其直接子级。
动画器窗口 (Animator Window) 显示整个 混合树 (Blend Tree) 的图形。左侧是仅包含根混合节点 (Blend Node) 的混合树 (Blend Tree)。右侧是包含根混合节点 (Blend Node) 以及以三个动画片断 (Animation Clip) 做为子节点的混合树 (Blend Tree)。
这会为参数值变化时的动画组合方式提供图形可视化(在拖动滑块时,源自树根的箭头会改变其底纹以显示主要动画片断)。
能够在混合树 (Blend Tree) 图中选择任何节点以在检视器 (Inspector) 中检视它。若是所选节点是动画片断 (Animation Clip),则会显示该动画片断 (Animation Clip) 的检视器 (Inspector)。若是动画是从模型导入,则设置是只读的。若是节点是混合节点 (Blend Node),则会显示混合节点 (Blend Node) 的检视器 (Inspector)。
下图是运动前已添加的检视器 (Inspector) 中显示的混合节点 (Blend Node)。
混合类型”(Blend Type) 下拉菜单用于选择能够根据一个或两个参数混合的不一样混合类型之一。能够在如下页面上了解有关不一样混合类型和其余混合树 (Blend Tree) 选项的更多信息。
一、一维混合 (1D Blending)
混合节点 (Blend Node) 的检视器 (Inspector) 中的第一个选项是混合类型 (Blend Type)。此下拉菜单用于选择能够根据一个或两个参数混合的不一样混合类型之一。一维混合 (1D Blending) 根据单个参数混合子运动。
设置混合类型 (Blend Type) 以后,须要执行的第一个操做是选择将控制此混合树 (Blend Tree) 的动画参数 (Animation Parameter)。在此示例中,该参数为方向 (direction),它在 -1.0(左)与 +1.0(右), 其中 0.0 表示笔直运行而不倾斜。
随后能够经过单击 + ->添加运动域 (Add Motion Field) 将动画片断 (Animation Clip) 添加到混合树中,从而添加各个动画。完成后,它应相似于下面这样:
二、二维混合 (2D Blending)
混合节点 (Blend Node)的检视器 (Inspector) 中的第一个选项是混合类型 (Blend Type)。此下拉菜单用于选择能够根据一个或两个参数混合的不一样混合类型之一。二维混合 (2D Blending) 类型根据两个参数混合子运动。
三、其余混合树 (Blend Tree) 选项
如下选项对一维和二维混合通用。
时间尺度 (Time Scale)
可使用动画速度数字字段(顶部具备时钟图标的列)改变更画片断 (Animation Clip) 的“天然”速度,从而能够经过使用值 2.0 做为速度,使行走速度是之前的两倍。调整时间尺度 (Adjust Time Scale) > 均匀速度 (Homogeneous Speed) 按钮可从新调整片断的速度,以便它们符合参数的最小值和最大值,可是保持最初具备的相同相对速度。
请注意,仅当全部运动都是动画片断 (Animation Clip) 而不是子混合树 (Blend Tree) 时,调整时间尺度 (Adjust Time Scale) 下拉菜单才可用。
镜像 (Mirroring)
能够经过启用最右侧的镜像开关来镜像运动列表中的任何类人动画片断 (Animation Clip)。此功能使您能够采用原始形式和镜像版本使用相同动画,而无需两次使用内存和空间。