首页 理论教育Unity动画系统的概述

Unity动画系统的概述

【摘要】:首先了解一下Unity中Animation动画组件的简单应用。Mecanim是指新版动画系统。4)Unity中新版动画系统Animator的使用Mecanim是Unity提供第一个丰富而复杂的动画系统,提供了:●针对人形角色的简易的工作流和动画创建能力。Mecanim工作流:①资源导入,这一阶段由美术师或动画师通过三维工具来完成。应该尽可能地减少人形网格的面片数量,从而更好地在Unity中使用。

首先了解一下Unity中Animation动画组件的简单应用。

1)Animation组件

(1)Animatin默认动画。

(2)Animatins/Size播放动画数量。

(3)Rig/Animatin Type/Legacy是指旧版动画系统。

Mecanim是指新版动画系统。旧版本动画系统和新版本的动画系统有很大的不同。

如何播放动画?播放动画主要用到这几个方法,Play,CrossFade和CrossFadeQueued。三种方法的不同:

(1)Play是瞬间切换,没有过渡效果。

(2)CrossFade则是有过渡效果,但是只能且能切换同一层的动画,层级通过layer来设置。

(3)CorssFadeQueued()函数是播放动画队列,参数是(动画名称,过渡长度,队列模式,播放模式),其中队列模式是指结束上一个动画,开始下一个动画。那么结束播放动画如何实现呢?只需要通过Stop()函数即可实现。

2)动画融合

(1)AddMixingTransform()

参数是你要播放动画的组件,例如一个人物有胳膊,腿,身体,人物走路的时候只想让它的腿动,而手不动,则此时可以用动画融合,函数参数就是两条腿就可以实现该效果。

3)动画帧事件

定义:当动画播放到某一帧,执行指定的方法,例如当敌人AI攻击的时候武器打中人物的时候。但是此时并没有真正的打中 只是到达一定的角度,像是刺中,而执行人物掉血的方法,就可以使用动画帧事件。

创建动画帧事件的过程:

(1)首先需要拷贝人物预置体中的动画到另一个文件夹中原因:因为通过动画分割出的动画或者说是人物预置体中自带的动画,属性为只读属性,不可添加帧事件。

(2)然后再打开Animation快捷键是Ctrl+6。

(3)再选定动画和该动画指定的某一帧添加帧事件即可,事件方法只要在该物体上挂载的脚本上定义。而这里又要涉及一个重要的方法SendMessage()顾名思义,这个方法是发送消息的,让目标物体执行一个方法。具体用法是SendMessage(“方法名”,参数),方法在目标所挂载的脚本中定义,估计有人会问,这个有什么用,例如,敌人AI打击到了人物,人物的血条要减少,就可以通过SendMessage来达到这样的效果。

4)Unity中新版动画系统Animator的使用

Mecanim是Unity提供第一个丰富而复杂的动画系统,提供了:

●针对人形角色的简易的工作流和动画创建能力。

●Retargeting(运动重定向)功能,即把动画从一个角色模型应用到另一个角色模型上的能力。

●针对Animations Clips(动画片段)的简易工作流,针对动画片段及他们之间的过度和交互预览能力。

●一个用于管理动画间复杂交互作用的可视化窗口。

●通过不同逻辑来控制不同身体部位的运动能力。

(1)Mecanim工作流:

①资源导入,这一阶段由美术师或动画师通过三维工具来完成。

②角色的建立,主要分为以下两种方式。

●人形角色的建立,Mecanim通过扩展的图形操作界面和动画重定向功能,为人物模型提供了一种特殊的工作流,它包括Avatar的创建和对肌肉定义(Musicle Definitions)的调节。

●一般角色的建立,一般为运动物体和四足动物而设定,动画重定向对此不适用。

③角色的运动,包括设定动画片段以及其相互间的交互作用,也包括建立状态机和混合树、调整动画参数以及通过代码控制动画等。

(2)获取人形网格模型:

①人形网格模型,为了充分利用Mecanim的人形动画系统和动画重定向功能,需要一个具有骨骼绑定和蒙皮的人形网格模型。

●人形网格模型一般由一组多边形或三角形网格组成,创建模型的过程称为建模(modelling);

●为了控制角色的运动,必须为其创建一个骨骼关节层(joint hierarchy);

●人形网格模型必须与关节层级关联起来,通过指定关节的动画来控制特定网格的运动,这个过程称为蒙皮(skinning);

一句话来总结,创建好人物模型后(建模modelling),为其创建一个骨骼关节(joint hierarchy),最后异步将人物网格模型和关节关联起来(蒙皮skinning)。[modelling→joint hierarchy→skinning]

②获取模型,在Mecanim系统中,可以通过三种途径来获取人物网格模型:

●使用一个过程试的人物建模工具,Poser、Makehum或Mixamo等。其中有些三维软件可以在建模的同时进行骨骼绑定和蒙皮操作。应该尽可能地减少人形网格的面片数量,从而更好地在Unity中使用。

●在Unity Asset Store下载。

●通过三维建模软件来创建全新的人形模型,这类软件包括3Dmax、Maya、Blender等。

③导出和验证模型,Unity引擎可以导入一系列的常用3D文件格式,推荐使用FBX 2012,因为改格式允许:导出的网格中包含关节层级、法线、纹理以及动画信息;也可以导入不包含网格的动画信息。

(3)动画分解:

①预分解动画模型:最容易使用的动画模型是含有预分解动画片段模型,这种动画模型在导入项目后,可看到面板中包含多个可用的动画片段列表,还可对每个动画片段的帧数范围进行编辑调整。

②未分解动画模型:提供单一连续动画片段的模型,这种情况可自行设定每个动画的片段所需要的帧。如该模型动画一共有100帧,1—10帧为待机喘息状态,11—30帧为行走,31—60帧为奔跑,61—80帧为攻击,81—100帧为死亡动画。

③为模型添加动画:用户可以为任意模型的动画组建添加动画片段,该模型甚至可以没有肌肉定义(非Mecanim模型),进而在Animations属性中指定一个默认的动画片段和所有可用的动画片段。在非Mecanim模型上添加动画片段也必须采用非Mecanim的方式进行,即将Muscle Definition属性设置为None。

对具有肌肉定义的Mecnim模型处理过程如下:

●创建一个Animator Controller。

●打开Animator Controller窗口。

●将特定的动画片段拖到Animator Controller窗口。

●将模型资源拖入到Hierarchy视图中。

④通过模型文件来导入动画片段:该方法是遵循Unity指定的动画文件命名方案,用户可以创建独立的模型文件并按照modelName@animaionName.fbx的格式来命名。例如一个魔法师的模型(wizard.fbx),待机、行走、攻击分别命名为wizard@idle.fbx、wizard@walk.fbx、wizard@attack.fbx。只有在这种情况下,动画数据才会被使用。

(4)使用人形角色动画:Mecanim动画系统特别适合用于人形角色的动画制作,因为人形模型均具有相同的基本结构,所以用户可以实现将动画效果从一个人形骨架映射到另外一个人形骨架上去,从而实现动画重定向的功能。

创建一个动画的基本步骤就是创建一个从Mecanim系统的简化人形骨架结构到用户实际提供的骨架结构的映射,这种映射关系称为Avatar,下面就介绍如何为一个模型创建一个Avatar。(www.chuimin.cn)

(5)创建Avatar:在导入一个模型(例如fbx)后,在该模型面板上选中Rig选项卡指定它的骨骼模型,包括Humanoid、Generic和Legacy这三种。

①人形动画(Humanoid)

对于人形骨架,选中Animation Type下拉菜单,选择Humanoid,单击Apply按钮,Mecanim系统就会尝试将用户提供的骨架结构与Mecanim系统内嵌的骨架结构进行匹配,匹配成功后在可以看到Configure...复选框被选中。在匹配成功的情况下,会在模型资源中添加一个Avatar子资源。需要注意的是,这里匹配成功仅仅是匹配了所有必要的关节骨骼,如果想达到更好的效果,还需要对Avatar进行手动调整。如果在Configure...旁边显示一个叉号,即不会生成相应的Avatar子资源,这种情况就需要手动配置Avatar。

②非人形动画

Unity为非人形动画提供了两个选项,一般动画类型(generic)和旧版动画类型(legacy),一般动画仍可由Mecanim系统导入,但无法使用人形动画专有的功能。

配置Avatar:

在上一步生成Avatar子资源后,即可配置Avatar。Avatat是Mecanim系统中极为重要的模块,因此为模型资源正确的设置Avatar也至关重要,不管Avatar自动创建过程是否成功,用户都需要进入Configure...Avatar界面中确认Avatar的有效性,即确认用户提供的骨骼结构与Mecanim系统预定义的骨骼结构是否正确的关联起来,并且模型处于T形姿态。

单击Configure...后Scene视图将被用于显示当前模型的骨骼、肌肉、和动画信息,同时会出现一个Avatar配置面板,可看到一个关键骨骼映射信息的视图,该视图还显示了哪些骨骼是必须匹配的(实线圆圈),哪些是可选匹配的(虚线圆圈)。为了方便Mecanim进行骨骼匹配,用户提供的骨架中应包含所有必须匹配的骨骼。此外为了提高匹配的成功率,应尽量通过骨骼代表的部位来给骨骼命名。

如果复发为模型找到合适的匹配,用户也可以通过类似Mecanim内部使用的方法来进行手动配置:

①在Avatar面板中选择Pose下拉项中的Sample Bind-pose(得到模型的原始姿态);

②在Avatar面板中选择Mapping下拉项中的Automap(基于原始姿态创建一个骨骼映射);

③在Avatar面板中选择Pose下拉项中的Enforce T-pose(强制模型贴近T形姿态,即Mecanim动画的默认姿态)

如果在第二个步骤中,自动映射的过程出现失败或者局部失败,用户可通过Scene视图或者Hierarchy视图中拖出骨骼并指定骨骼,如果Mecanim认为骨骼匹配,将在Avatar面板中以绿色显示,否则以红色显示。

如果没有指定正确则会看到Sence视图中会出现Character not in T-pose提示,可通过Enforce Tpose强制将模型转换为T型姿态或者旋转至模型为T型姿态。

上述骨骼映射信息还可奥村一个人形模版文件(humanoid template file).ht,这个文件可在所有使用这个映射关系的角色之间复用。

设置Muscle参数:

Mecanim使用肌肉(muscle)来限制不同骨骼的运动范围,一旦Avatar配置完成,Mecanim就能解析其骨骼结构,进而用户就可以在Muscles选项卡中调节相关参数。在此可非常容易的调节角色的运动范围,确保看起来真实自然。

用户可以在视图上方使用预先定义的变形方法对几根骨骼同时进行调整,也可在视图下方对身体上单根骨骼进行调整。

人形动画的重定向:

人形重定向是Mecanim系统中强大的功能之一,这意味着开发者只需要很简单的操作即可将一组动画应用到其他人形角色模型上,前提是必须正确的配置Avatar。

导入单个动画文件:

在从三维软件导出模型前,遵循Unity 3D动画文件命名方案,为单个动画模型文件命名modelName@animationName.fbx,即 模型名称@动画名称.fbx。

例如对于一个名为warlock(魔法师)的模型,分别指定idle(待机),walk(行走),attack(攻击),death(死亡)等动画。

即命名规范:

warlock@idle.fbx

warlock@walk.fbx

warlock@attack.fbx

warlock@death.fbx

另外还需导出一个warlock.fbx不带动画的模型文件,在导出模型前勾选no animation选项即可,warlock.fbx模型会遵循动画文件命名规范来索引其他带动画的模型文件。

旧版动画系统和新版动画系统最大的区别就是新版动画系统加入了骨骼Avatar,骨骼顾名思义就是给物体添加骨骼架构,从旧版动画切换到新版动画会自动生成骨骼,生成结果为勾号,代表可以使用,生成结果为叉号,骨骼不可以使用,说明有错误。骨骼多数用于人形动画,如图7-126所示。

图7-126 人形动画

图7-127 骨骼

如图所示,其中绿色部分就是骨骼,如图7-127所示。

而通过选中Muscles和Settings选项就可以编辑关节肌肉的具体位置。

(6)状态机:状态机十分强大,它是可视化的,通过状态机可以控制人物的动画播放。说到状态机,就要提到Animtor controller动画控制器,单击右键,选择创建Animator Controller再在动画控制器的视图界面上单击Open按钮就可以打开Animator界面,就可以开始编辑状态机了,如图7-128所示就是状态机的编辑界面。

其中有两个重要的属性Layer和Parameters,Layer是指层级,Parameters中有四个重要的参数:

(1)Float大于,小于。

(2)Int大于,小于,等于,不等于。

(3)Bool true false。

图7-128 状态机的编辑界面

(4)Trigger触发器

这四个参数是用来控制动画切换的条件。

把需要播放的动画拖拽进入编辑器中就回变成一个像按钮一样的东西再给他添加过渡的线就可以切换动画了,而添加的条件就是放在这些选中的线中,这里还有一个重要的属性,Has Exit Time勾选中了就是不立即切换动画,取消勾选就是立即切换动画,默认是勾选状态,如7-129所示。

切换动画的状态也涉及三个触发事件:OnStateEnter状态进入,inStateExit状态退出,OnStateUpdate状态更新。如图7-130所示。

新版动画系统也可以给指定的某一帧添加帧事件,而且更方便,首先要选中要添加帧事件的动画,单击Edit按钮下面有个属性Event就可以添加帧事件了,具体如图7-131所示。

图7-129 Has Exit Time设置

图7-130 切换动画的状态涉及的三个触发事件

总而言之,新版动画系统比旧版动画系统用起来是更加的方便的。