Unity3D 动画系统分类
1.Unity3D 3.5版本之前是旧的系统Legacy系统
2.Unity3D 4.0版本新增加Mecanim动画系统
新动画系统的有点
1>可视化动画剪辑编辑
2>能够对动画信息进行复用
3>利用动画状态机(Animation State Mechine)实现不同状态下动画剪辑的过渡
一般动画系统的制作与使用流程
1>在第三方的建模软件中制作好模型,接着导出Unity3D 支持的格式,然后导入Unity3D中
2>通过状态机(State Mechines)和融合树(Blend Trees)和反向动力学(Inverser Kinematics)等功能对动画剪辑进行设置,最后使用代码控制角色的播放。
建模注意事项;
1.注意模型尺寸,一般在1.7~1.8之间
2.在三维建模软件中,是角色的最底部与世界坐标的中心点对齐
3.尽量把模型制作为T型姿势
4.确保骨盆位置上骨骼关节为所有的骨骼的父层级
5.确保骨骼结构至少为15个骨骼
一般模型建议使用FBX格式导出。导出的两个方式:
1.所有的动画信息与模型信息一起导出,这些动画导入Unity3D 之后是被视为一个连续的动画
2.第二种方式把每个动画信息单独导出为FBX格式。使用此方式导出时候,注意对动画合理的命名,一般的命名的规则为:模型名称@动画剪辑.FBX
运用Mecanim动画系统制作动画需要进行四步的开发
1.制作替身
2.设置动画状态机
3.设置动画循环
4.使用代码控制角色动画。
状态机的融合树技术(Blend Tree)
融合树结构可以使得一个东湖爱剪辑与另外的动画剪辑序列进行光滑融合,也就是说是两个动画的合并
1.在Animator窗口右键 Create State ——>Form New Blend Tree 命名BlendTree-Crouch
2.双击进入BlendTree-Crouch动画状态,进入Blend Tree 编辑窗口
3.选择BlendTree-Crouch,在属性窗口中点击Motion下面“+”号,在弹出的下拉菜单中选择“Add Motion Field” 添加动画序列。
4.点击None后面的小圆圈,打开Select Motion面板,选择相对应动画,比如如下图所示
5.可以修改权重位置。把自动临界点(Automatic Threshholds)的勾取消掉,这样可以自定义
融合树控制核心代码
animator=GetComponent<Animator>();//得到物体的组件
AnimatorStateInfo stateInfo=animator.GetCurrentAnimatorStateInfo(0);//获得动画器状态信息
float h=Inout.GetAixs("Horizontal");//获得水平的返回值
float v=Input.GetAixs("Vertical");//获得垂直的返回值
animator.SetFloat("Speed",h*h+v*v);//把h和v求平方相加赋值给状态机中的自定义变量Speed上
animator.SetFloat("Direction",h,DirectionDampTime,Time,delltaTiome);//DirectionDampTime这是自定定义的float变量
if(stateInfo.IsName("Base Layer.Blend Tree-Crouch"))
{
if(h < 0)
{
tranform.position+=-transform.right*leftspeed*Time.deltaTime;
}
}
Animator 属性说明:
Controller:附加到角色的动画控制器
Avatar:角色Avatar
Apply Root Motion:动画自身还是脚本控制角色的实际位置(开启为脚本)
动画层与身体蒙版
动画层技术可以从已有的动画创造出新的动画系统
融合树技术是有两个动画序列的同一谷歌的不同运动位置融合为骨骼的最终位置,而动画层用于把不通部位的东湖组合起来成为最后的全身的动画效果。
动画复用
动画复用就是把动画剪辑序列复用到其他的角色上
反向力学(IK)
反向动力学是依据子关机的最终位置、角色来反求出父关节甚至整个骨架的形态。