u8,u8国际,u8国际官方网站,u8国际网站,u8国际网址,u8国际链接,u8体育,u8体育官网,u8体育网址,u8注册,u8体育网址,u8官方网站,u8体育APP,u8体育登录,u8体育入口
Mechanic动画系统是Unity公司从Unity4.0之后开始引入的新版动画系统,它提供了如下四种功能。
(1)针对人形角色提供了一套特殊的工作流,包括Avatar的创建以及Muscles肌肉的调节;
(2)动画重定向(Retarting)的能力,可以非常方便的把一个动画从一个角色模型应用到其他角色模型上;
(3)提供了可视化的Animator编辑器,可以快捷预览和创建动画片段;
(2)角色设置:人形角色设置(Humanoid)和通用角色设置(Generic)
AnimationClip(动画片段):可用于角色或者简单动画的动画数据
BodyMask(身体遮罩):用于包括或者排除身体骨骼部位的一种控制方式。比如角色在进行射击动作时候,只用手臂和头进行瞄准,其他身体部位保持静止。
:它用来决定角色的运动是否由动画本身或者外部逻辑来实现。一般我们是由动画本身实现的。
:动画层,一个动画层包含了一个动画状态机,这个动画状态机能够控制整个或者部分模型的一系列动画。
BlendTree:混合树,基于Float类型的参数对相似的动画片段进行混合。
IK:反向动力学,可以用在基于场景中的各种对象来控制角色身体部位的运动。通俗的理解就是,当角色看到前面有个苹果时,角色的手臂就知道应该如何运动才能到达苹果的位置并且拿到苹果。
对于人形骨架,在Animation Type右侧的下拉菜单中选择Humanoid,然后单击Apply按钮,Mecanim系统就会尝试将用所提供的骨架结构与Mecanim系统内嵌的骨架结构进行匹配。在多数情况下,这一步可以由Mecanim系统通过分析骨架的关联性而自动完成。如果匹配成功,用户会看到在Configure...复选框被选中。在匹配成功的情况下,在Project视图,有一个Avatar子资源将被添加到模型资源中。
Avatar是Mecanim系统中极为重要的模块,因此为模型资源正确地设置Avatar也就变得至关重要。不管Avatar的自动创建是否成功,用户都需要进入到Configure Avatar界面中去确认Avatar的有效性,即确认用户提供的骨骼结构与Mecanim预定义的骨骼结构已经正确匹配起来,并且模型已经处于T形姿态。
可选匹配骨骼的运动会根据必须匹配骨骼的状态来自动插值计算。为了方便Mecanim进行骨骼匹配,用户提供的骨架中应包含所有必须匹配的骨骼。为了提高匹配的几率,应尽量通过骨骼代表的部位给骨骼命名(如:左手命名为LeftArm)。
Mecanim使用肌肉(Muscle)来限制不同骨骼的运动范围。一旦Avatar配置完成,Mecanim就能解析其骨骼结构,进而用户可以在Avatar面板的Muscles选项卡中调节相关参数。在此可以调整角色的运动范围,以确保骨骼运动起来线 Avatar身体遮罩(Body Mask)
Unity可以通过身体遮罩来选择性地控制身体的某一部分是否受动画的影响,用户可以在Model Import Inspector的Animation选项卡中,选中一个Clip,然后下面的Mask-Humanoid,在此Humanoid选择哪些部分不受动画影响(红色部分不受身体影响)。这样就可以控制动画的局部更新,从而满足一些特殊需求。
使用Body Mask的一个好处是减少内存开销,这是因为不受动画影响的身体部分就不需要计算与其相关联的动画曲线;同时,在动画回放时也无须重新计算无用的动画曲线,进而减少动画的CPU和GPU开销。
3) Apply Root Motion:是使用动画本身还是使用脚本来控制角色的位置
- Based on Renderers: 当看不见角色时只有根节点运动,身体的其它部分保持静止。
(1)新建工程,导入必要的资源以及纹理,同时创建AniController文件夹,用来存储动画控制器。
(1)单击鼠标右键,Create State-Empty创建空白的动画状态单元,也可以直接将动画片段拖动到该界面之中,快速创建动画状态单元。
(2)然后将鼠标箭头放在状态单元,右击MakeTransition,并且再次点击到另外一个动画状态单元,完成动画过度条件的连接。
(3)按照下图所示的连接该状态,设置Idle为默认状态,显示为黄色,其他单元显示为灰色。我们可以在其他灰色单元右击Set As Default。
Bake Into Pose:不勾选表示动画产生的旋转或位移(具体看是哪个选项下面)会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上。
具体的效果如下(我的这个动画是人物进行前空翻的动画):Root Transform Position(XZ)的Bake Into Pose没有勾选,表示人物前空翻时,主体GameObject会向前移动,如果勾选则GameObject在XZ平面则不会移动。同理,Root Transform Position(Y)勾选表示GameObject在Y轴不移动,如果不勾选,则跟随摄像机会产生抖动,因为目标GameObject在Y轴也出现了跳跃时移动。
Center of Mass:表示基准点使用质量中心,表现为人物下半身会嵌入地面。
动画状态机和过度条件搭建完成之后,就需要对状态机的过度条件进行设置。为了实现过度条件的操控,需要创建一个或者多个参数与之搭配。Mecanim支持的参数类型有Float,Int,Bool,Trigger。
Speed:表示当前状态的速度,1表示正常速度,后面的Parameter勾上表示使用一个参数来表示当前的速度,同时输入框会变为下拉选择框,我们可以选择指定的参数,参数可以在Parameters面板中配置,其作用就是可以方便的通过代码修改参数的值来达到控制速度的目的,下面的Parameter也一致,就不赘述了。
Mirror:是否将动画沿Y轴进行翻转,一般用来复用动画,比如招右手的动画勾选了此项就会变为招左手;
Foot IK:是否开启脚部的IK动画(反向动力学),一般关闭,在需要脚部贴合地面的情况时可以开启;
Write Defaults:动画播放完毕后是否将状态重置为默认状态,一般勾选即可;
下面的Transitions面板则会列出当前状态可以过渡到其它状态的列表:
Solo:勾选表示当前过渡为唯一过渡,即当前状态只能过渡到这个项目指向的状态;
Mute:勾选表示使这个动画过渡关闭,即当前状态不能过渡到这个项目指向的状态;
为了能够观测到每个状态单元的进入、停留或者离开等操作。 状态单元提供了函数用来检测状态的进入,我们需要实现一个类,继承自StateMachineBehaviour,然后分别实现里面的虚函数即可。如下面的代码所示即可。
(1)首先我们选中需要添加事件的动画片段, 我在示例中选择Attack攻击动画。在需要添加事件的帧上,点击添加帧事件。出现下图所示的界面。
(2)Blend Tree默认会创建一个Float类型的参数Blend作为调节混合树动画比例的参数。
映射后的模型骨骼通过Avatar驱动系统自带的骨骼运动,这样就产生了一套通用的动画。其他模型只需要借助这套通用的骨骼动画,就可以做出与原来的模型一样的动作,实现了角色重定向,极大的减少了项目工作量,以及软件开发包的大小。
(2)创建C#脚本,将其命名为AniController,然后把脚本拖拽到People对象上,代码如下所示。
IK(Inverse Kinematics)即反向动力学,即可以使用场景中的各种物体来控制和影响角色身体部位的运动,一般来说骨骼动画都是传统的从父节点到子节点的带动方式(即正向动力学),而IK则倒过来,由骨骼子节点带动骨骼父节点,具体情况比如人物走路踩到了石头就需要由脚的子节点来带动全身骨骼做出踩到石头的响应。
IK可以使人物和场景更加贴合,从而达到更加真实的游戏效果,如果大家玩过《波斯王子》或《刺客信条》系列,应该对主角的攀爬和飞檐走壁的能力印象深刻,这些都是应用了IK,使动画贴合到具体的场景中进行的表现
该插件是对Unity本身的IK的优化和增强,可以模拟出更加真实的效果,有兴趣可以看一看。
(2)在场景中创建一个球,作为左手需要去抓的物体,根据这个物体,我们去观察反向动力学的效果。