Mecanim动画系统(一)
Unity的动画系统由以下几部分组成:Animator(动画编辑器)、Animator Controller(动画控制器)、Animation(动画片段)、Avatar(骨骼模型)
他们之间关系如下图:(注:“Animator Controller”在“Animator”中进行编辑,可以创建多个“Animator Controller”;)
一、Animator(动画编辑器)
参数介绍:
1、Layers:动画层。
2、Parameters:参数类型。是动画片段触发的条件
3、Any State:可在任意动画状态下转入连接Any State的动画。
因为Any State在任意状态下都可以转入,所以条件应设为一次性触发。应该注意的是,如果触发条件一直为真。那么动画将没有播完就会重新开始播放。此时可以将动画改为其他动画转入,并将触发条件改为 bool 值,可以避免动画没播完就重新开始播放的情况。
4、Exit:动画出口。该出口指向Entry
5、Entry:动画入口。连接该动画层的默认动画
Add Behaviour 的简单应用:
在 Animator 中选中动画事件,可以在“Add Behaviour”中添加脚本增加动画的灵活性。脚本自动继承 “StateMachineBehaviour”,
可以使用回调函数:OnStateEnter();OnStateUpdate();OnStateMove();OnStateIK()
using System.Collections; using System.Collections.Generic; using UnityEngine; public class testBehaviour : StateMachineBehaviour { public GameObject goPrefabObj; //粒子系统预设(爆炸) private GameObject _goPrefabObj; //克隆变量 // OnStateEnter override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { //生成粒子系统 _goPrefabObj = Instantiate(goPrefabObj, animator.rootPosition, Quaternion.identity); } // OnStateExit :离开当前状态时调用 override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { Destroy(_goPrefabObj); } }
二、Animator Controller(动画控制器)
“Animator Controller”可以在Project视图上创建,或者直接拖拽动画片段到 Animator 编辑器中(“Animator Controller”将会自动创建)。该动画控制器将在角色模型的Animator组件上添加应用。
三、Animation(动画片段)
1、Unity创建动画:
在hierarchy层级视图中选中需要创建动画的游戏对象,在Animation窗口点击Create即可创建一个动画片段,同时将会生成一个“Animator Controller”控制器。在Unity中只能创建一些简单的动画,常用于摄像机的漫游动画。较复杂的动画需要在3Dmax、Maya等三维软件中制作完成以后再导入。
2、导入动画:
● Import Animation:从该模型资源中导入动画。如果不勾选该模型则不会出现图片中的属性及动画。
● Loop time:动画循环
Loop pose:无缝运动
● Root Transform Rotation:
Bake Into Pose:消除动画播放本身产生的旋转
Based Upon: Transform 是(基于Original:原件,使用在文件中预设好的值;Feet:表示基准点使用第一帧的脚;Center of Mass:重心等)旋转或发生位移等。
其他Transform Position(···)依次类推。
● Mirror:镜像。即将动画左右互换。
● Curves:曲线(动画)
● Events:事件
● Mask:遮罩
● Motion:动作
四、Avatar(骨骼模型)
● Mapping:映射骨骼模型
● Muscle&Settings:肌肉设置