Controller:放置动画控制器 Animator Controller
Avatar:放置模型的骨骼
Apply Root Motion:使用根动画,勾选此项会根据动画产生实际的位移
Update Mode:更新模式
Culling Mode:剔除模式
上图所示的是建立动画控制器后的3个默认状态
Any State:表示任意的状态,指向的状态是在任意时刻都可以切换过去的状态,比如对象死亡
Entry:表示当进入当前状态机时的入口
Exit:表示退出当前的状态机
Create State:创建状态
Create Sub - State Machine:创建子状态机,如果动画太多可以用这个避免状态机臃肿
Paste:粘贴状态
Copy current StateMachine:复制当前状态机
Make Transition:动画过度
Set as Layer Default State:设置为默认动画
Copy:复制状态
Create new Blendtree in State:以该动画片段创建新的混合树
Delete:删除
Weight:权重,默认的Base Layer必须为1,值为0表示不播放,层与层之间的关系类似融合树
Mask:动画的遮罩,里面是骨骼信息
Blending:动画的混合方式
Sync:复制其它层
勾选此项会在下方出现一个新的属性 Source Layer用来选择要复制的层
Timing:勾选此项表示改成和Sync复制的层的动画持续时间不一致时按照自己的速度来
IK Pass:使用IK动画(后面会讲到)
点击右上角的 + 号,可以添加动画过渡时的参数
// 设置参数
ani.SetInteger("Float)参数名", 0f);
ani.SetInteger("(Int)参数名", 0);
ani.SetInteger("(Bool)参数名", true);
ani.SetInteger("(Trigger)参数名");
// 获得参数状态
ani.SetInteger("(Float)参数名", 0f);
ani.SetInteger("(Int)参数名", 0);
ani.SetInteger("(Bool)参数名", true);
// 获取当前层动画状态信息
ani.GetCurrentAnimatorStateInfo(0(动画所在层)).IsName("LocalMotion"(动画名));
// 将字符串转换为哈希ID,整型数据比字符串的操作要好很多,建议使用这个方法
Animator.StringToHash("动画名");
Has Exit Time:勾选此项可以立刻转到下一个动画状态,不必等当前状态播放完毕
Settings:设置
Exit Time:退出的时间
Fixed Duration:固定时间,如果选中了固定时间框,则转换时间以秒为单位进行解释。如果固定时间框未选中,则将转换时间解释为源状态的标准化时间的一小部分。
Transition Duration:过渡时间,在标准化时间内,相对于当前状态的持续时间
Transition Offset:源状态转换到目标状态过程中的偏移时间,值为0.5意味着目源状态开始以过载50%通过自己的时间线
Interruption Source:使用此控件可以控制此转换可能中断的情况
Ordered Interruption:确定当前转换是否可以独立于其他转化中断
Conditions:转换的条件(就是上面的那些Float、Int、Bool和Trigger)
融合树将多个动画融合到了一起,一般用在多个不同方向的动画,且参数类型必须是浮点型,双击Blend Tree即可进入融合树的编辑。
Bland Type 为1D即为一维融合树,动画只能两个两个的融合。
Parameter:选择参数
Motion:添加动画片段后者新的融合树,添加方式如下
Thresholds:设置临界值, 后面的时钟表示改动作播放的速度
Automate Thresholds:自动设置临界值
Compute Thresholds:如果不勾选Automate Thresholds,就会出现此属性
Bland Type:2D Simple Directional:所有被融合的动画⽅向不⼀致,
Bland Type:2D Freedom Directional:相⽐第⼀个,需要⼀个没有⽅向的动画,允许一个方向上设置多个动作
Bland Type:2D Freedom Cartesian:随意融合
内容基本和一维融合树相同,区别在于有两个参数进行控制,图中的红点当前位置,后方的菱形表示中心位置(0,0)
Compute Positions:指定从动画文件中获取参数及其范围
根据权重直接混合多个动画,通常用来实现表情动画。
添加动作后,需要为每个动作设置其控制参数,来进行控制。
Normallized Blend Valus:标准化的混合值
Adjust Time Scale:调整时间尺度
顶部为动画名称
其下为动画标签
Motion:这状态的动画片段
Speed:动画的播放速度,值越大越快
Multiplier:乘数,我的理解是勾选右边的复选框后,在参数列表中选择一个整型来控制播放速度(按倍数算)
Normalized Time:标准化时间.
Mirror:动画镜像
CYcle Offset:播放偏移量
Foot IK:脚部动画的IK
Write Defaults:动画播放完毕后是否将状态重置为默认状态
Transitions:此动画的过度
Solo:勾选表示当前过渡为唯一过渡,即当前状态只能过渡到这个项目指向的状态
Mute:勾选表示使这个动画过渡关闭,即当前状态不能过渡到这个项目指向的状态
Scale Factor:缩放系数,模型的缩放
Use File Scale:是否开启文件压缩
File Scale:文件的缩放
Mesh Compression:网格压缩
Read/Write Enabled:是否启用读/写操作
Optimize Mesh:优化网格
Import BlendShapes:导入混合模型
Generate Colliders:生成碰撞体
Keep Quads:开启则网格采用四边形,否则采用三角形
Index Format:索引格式,定义网格索引缓冲区的大小
Weld Vertices:焊接顶点,通过减少网格的总数,可以优化网格上的顶点数,默认选项
Import Visibility:是否可见,导入FBX时启用MeshRenderer组件
Import Cameras:是否导入相机
Import Lights:是否导入光
Preserve Hierarchy:保留层次结构,就是模型对象在Hierarchy里的层级结构(我认为)
Swap UVs:交换UV。如果光照贴图识别了错误的UV通道,选中该项,可以交换第一、第二UV通道
Generate Lightmap UVs:生成光照贴图UV通道,如果勾选此项会出现Advanced高级选项
Normals:法线,定义是否以及如何计算法线,这对于优化游戏大小很有用
Normals Mode:法线模式,定义Unity如何计算法线,仅在将法线设置为Calculate时可用
Smoothing Angle :平滑角度,设置网格面片的夹角阀值,作用于调节法线贴图切线
Tangents:切线
———————————————————————————————————————————————————————————————————————————————————
Avatar我的理解就是骨骼骨骼
Avatar Definition:Avatar 定义
Configure…:指向其他模型上设置的 Avatar 配置
Optimize Game Object:优化游戏对象
———————————————————————————————————————————————————————————————————————————————————
上部分
Import Animation:勾选后才可以导入动画到 Unity 工程中
Bake Ainmations:这个选项只在使用 Humanoid 动画并且使用到了 IK 特性的时候才可用
Anim.Compression:应用于此网格物体的动画的压缩类型
当Anim.Compression为Keyframe Reduction 或者 Optimal 时,才会出现以下三个用于控制压缩选项的系数配置
越小精度就越高,动画的失真度就越小
Animated Custom Propertie:导入任何您指定为自定义用户属性的FBX属性
Clips:动画片段
Start:开始时间
End:结束时间
Root Transform Rotation:表示为播放动画的对象的旋转方面的信息
Root Transform Position(Y):表示为播放动画的对象的位置 y 轴方面的信息
Bake Into Pose:不勾选表示动画产生的旋转或位移会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上(Y轴上不会产生位移)
Based Upon:基准点
Root Transform Position(XZ):表示为播放动画的对象的位置 XZ 平面方面的信息
Bake Into Pose:不勾选表示动画产生的旋转或位移会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上(在XZ面上不会产生位移)
Based Upon:基准点
Mirror:左右镜像,比如一个动画是往左前方跑,勾选Mirror后,该动画网右前方跑
Additive Reference Po:一个参考姿势
帧事件,为动画添加帧事件
在固定的时间位置添加事件,当动画播放到该位置时会执行该方法
此方法需要在该动画附着的游戏对象身上
Function:方法名
Float,Int,Sting,Object:参数(可选)
为动画添加遮罩
Definition:遮罩定义
Transform:会显示遮罩/当前骨骼的信息,需要设为遮罩的部分勾选即可
在Root Motion Node中选择根运动节点,当播放完改动画后会恢复到跟运动动画的状态
Import Messages不知道试干嘛的
———————————————————————————————————————————————————————————————————————————————————
———————————————————————————————————————————————————————————————————————————————————
// 设置权重
ani.SetLookAtWeight(1);
ani.SetLookAtWeight(weight, bodyWeight = 0.0f, headWeight = 1.0f, eyesWeight = 0.0f, clampWeight = 0.5f);
// Weight 全局权重
// bodyWeight 身体权重
// headWeight 头部权重
// eyesWeight 眼睛权重
// clampWeight 权重的限制 0代表没有限制(脖子可能看起来和断了一样),1代表完全限制(头几乎不会动,像是固定住了)。0.5代表可能范围的一半(180度)
// 看向目标位置
ani.SetLookAtPosition(Target.position);
其他部位IK设置
// 设置位置和旋转的权重(除了头部之外都需要设置)
// AvatarIKGoal是一个枚举类
// LeftHand 左手
// LeftFoot 左脚
// RightHand 右手
// RightFoot 右脚
ani.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f);
ani.SetIKRotationWeight(AvatarIKGoal.RightHand, 1f);
// 末节点的位置和旋转
ani.SetIKPosition(AvatarIKGoal.RightHand, Target.position);
ani.SetIKRotation(AvatarIKGoal.RightHand, Target.rotation);
检测状态机中动画切片(Anamation)的运行状态
OnStateEnter :进⼊状态时执⾏⼀次
OnStateUpdate: 在状态中,每帧执⾏⼀次
OnStateExit: 离开状态时执⾏⼀次
OnStateMove: 执⾏动作的时候每帧执⾏⼀次
OnStateIK: 执⾏IK动画时每帧执⾏⼀次
使用快捷键Ctrl + 6或Window ==》Animation 打开Animation的编辑窗口
点击 Create 创建动画片段
点击 Add Property 选择需要做动画的部分,点击 + 进行编辑
红点是录制功能,先选择关键帧或者在需要的地方,点击录制按钮即可在场景中进行操作即可完成录制并建立关键帧
之后的是 第一帧 上一帧 暂停/开始 下一帧 最后一帧 最后是当前所在帧数
New Animation:可以切换动画片段,也可以添加新的动画片段
Samples:表示当前动画的总帧数,可以修改
菱形+:添加关键帧
竖条+:添加帧事件,插入帧事件后即可在Inspector中Function里选择方法