Unity3D 动画控制器 Animator Component

文章目录

  • Animator 组件
  • Animator Controller 动画控制器
      • 自建状态
        • 1.右键菜单
        • 2.在状态上右键
        • 3.Animator Layers
        • 4.Animator Pameters
        • 5.动画过度
  • 动画融合树 Blend Tree
        • 一维融合树
        • 二维融合树
        • Direct
  • 动画设置
          • 动画状态
          • 动画设置
            • ==Model 模型==
            • ==Rig 装置==
            • Animation
            • Materials 材质
  • IK动画
  • 动画状态机(继承StateMachineBehaviour)
  • 动画制作 Animation View

Animator 组件

Unity3D 动画控制器 Animator Component_第1张图片
Controller:放置动画控制器 Animator Controller
Avatar:放置模型的骨骼
Apply Root Motion:使用根动画,勾选此项会根据动画产生实际的位移
Update Mode:更新模式

  • Normal:表示使用Update进行更新
  • Animate Physics:表示使用FixUpdate进行更新(一般用在和物体有交互的情况下)
  • Unscale Time:表示无视timeScale进行更新(使用timeScale暂停了游戏也能用,比如UI)

Culling Mode:剔除模式

  • Always Animate:就算摄像机看不到动画还要继续播放
  • Cull Update Transform:摄像机看不见不更新,但是位置更新还是有的
  • Cull Completely:只要摄像机看不见就啥也不动

Animator Controller 动画控制器

Unity3D 动画控制器 Animator Component_第2张图片
上图所示的是建立动画控制器后的3个默认状态
Any State:表示任意的状态,指向的状态是在任意时刻都可以切换过去的状态,比如对象死亡
Entry:表示当进入当前状态机时的入口
Exit:表示退出当前的状态机

自建状态

1.右键菜单

Create State:创建状态

  • Empty:空状态,没有任何动画
  • From Selected Clip:选中一个动画片段后创建状态,一个动画
  • From New Blend Tree :融合树,多个动画的融合

Create Sub - State Machine:创建子状态机,如果动画太多可以用这个避免状态机臃肿
Paste:粘贴状态
Copy current StateMachine:复制当前状态机

2.在状态上右键

Make Transition:动画过度
Set as Layer Default State:设置为默认动画
Copy:复制状态
Create new Blendtree in State:以该动画片段创建新的混合树
Delete:删除

3.Animator Layers

Unity3D 动画控制器 Animator Component_第3张图片
Weight:权重,默认的Base Layer必须为1,值为0表示不播放,层与层之间的关系类似融合树
Mask:动画的遮罩,里面是骨骼信息
Blending:动画的混合方式

  • Override:覆盖,表示当前层的动画会覆盖掉其它权重低的动画,比如招手播放时右手就不能播放其它的动画了
  • Additive:添加,表示当前层的动画的量添加到其它权重低的动画,比如招手播放时,手部奔跑或站立的甩动也会保留

Sync:复制其它层
勾选此项会在下方出现一个新的属性 Source Layer用来选择要复制的层
Timing:勾选此项表示改成和Sync复制的层的动画持续时间不一致时按照自己的速度来
IK Pass:使用IK动画(后面会讲到)

4.Animator Pameters

点击右上角的 + 号,可以添加动画过渡时的参数

  • Float:float类型的参数,有大于和小于两种比较状态,在融合树中用的比较多
  • Int:int类型的参数,有大于、小于和等于三种比较状态
  • Bool:bool类型参数,多用于状态切换;
  • Trigger:本质上也是一个bool类型的参数,但是其值默认为false,且设置为true后系统会自动将其还原为false;
// 设置参数
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("动画名");
5.动画过度

Unity3D 动画控制器 Animator Component_第4张图片
Has Exit Time:勾选此项可以立刻转到下一个动画状态,不必等当前状态播放完毕
Settings:设置
Exit Time:退出的时间
Fixed Duration:固定时间,如果选中了固定时间框,则转换时间以秒为单位进行解释。如果固定时间框未选中,则将转换时间解释为源状态的标准化时间的一小部分。
Transition Duration:过渡时间,在标准化时间内,相对于当前状态的持续时间
Transition Offset:源状态转换到目标状态过程中的偏移时间,值为0.5意味着目源状态开始以过载50%通过自己的时间线
Interruption Source:使用此控件可以控制此转换可能中断的情况

  • None:关闭Interruption Source选项
  • Current State:从当前源打断
  • Next State:从下一个源打断
  • Current State Then Next State:优先从当前源打断,如果当前源不能切换到下一个状态则从下一个源打断
  • Next State Then Current State:则相反

Ordered Interruption:确定当前转换是否可以独立于其他转化中断
Conditions:转换的条件(就是上面的那些Float、Int、Bool和Trigger)

动画融合树 Blend Tree

融合树将多个动画融合到了一起,一般用在多个不同方向的动画,且参数类型必须是浮点型,双击Blend Tree即可进入融合树的编辑。

一维融合树

Bland Type 为1D即为一维融合树,动画只能两个两个的融合。Unity3D 动画控制器 Animator Component_第5张图片
Parameter:选择参数
Motion:添加动画片段后者新的融合树,添加方式如下

  • 右击视图中的Blend Tree,在右键菜单中添加
  • 点击上图中右下角的 + 号添加

Thresholds:设置临界值, 后面的时钟表示改动作播放的速度
Automate Thresholds:自动设置临界值
Compute Thresholds:如果不勾选Automate Thresholds,就会出现此属性

  • Select:Root Motion的移动速度
  • Velocity X:Root Motion 的速度向量的x值
  • Velocity Y:Root Motion 的速度向量的y值
  • Velocity Z:Root Motion 的速度向量的z值
  • Angular Speed(Rad):Root Motion 的旋转速度 弧度
  • Angular Speed(Deg):Root Motion 的旋转速度 角度
二维融合树

Bland Type:2D Simple Directional:所有被融合的动画⽅向不⼀致,
Bland Type:2D Freedom Directional:相⽐第⼀个,需要⼀个没有⽅向的动画,允许一个方向上设置多个动作
Bland Type:2D Freedom Cartesian:随意融合
Unity3D 动画控制器 Animator Component_第6张图片
内容基本和一维融合树相同,区别在于有两个参数进行控制,图中的红点当前位置,后方的菱形表示中心位置(0,0)
Compute Positions:指定从动画文件中获取参数及其范围

  • Velocity XZ:根据各个运动的 velocity.x 设置其“位置 X”(Pos X),并根据其 velocity.z 设置其“位置 Y”(Pos Y)
  • Speed and Angular Speed :根据各个运动的角速度(以弧度/秒为单位)设置其“位置 X”(Pos X),并根据其速度设置其“位置 Y”(Pos Y)
  • PositionX from:计算X,Y保持不变进行混合和匹配,子菜单与1维相同
  • PositionY from:计算Y,X保持不变进行混合和匹配,子菜单与1维相同
Direct

根据权重直接混合多个动画,通常用来实现表情动画。
Unity3D 动画控制器 Animator Component_第7张图片
添加动作后,需要为每个动作设置其控制参数,来进行控制。
Normallized Blend Valus:标准化的混合值
Adjust Time Scale:调整时间尺度

  • Homogeneous Speed:均速
  • Reset Time Scale:复位时间尺度

动画设置

动画状态

Unity3D 动画控制器 Animator Component_第8张图片
顶部为动画名称
其下为动画标签
Motion:这状态的动画片段
Speed:动画的播放速度,值越大越快
Multiplier:乘数,我的理解是勾选右边的复选框后,在参数列表中选择一个整型来控制播放速度(按倍数算)
Normalized Time:标准化时间.
Mirror:动画镜像
CYcle Offset:播放偏移量
Foot IK:脚部动画的IK
Write Defaults:动画播放完毕后是否将状态重置为默认状态
Transitions:此动画的过度
Solo:勾选表示当前过渡为唯一过渡,即当前状态只能过渡到这个项目指向的状态
Mute:勾选表示使这个动画过渡关闭,即当前状态不能过渡到这个项目指向的状态

动画设置

在这里插入图片描述

Model 模型

Unity3D 动画控制器 Animator Component_第9张图片
Scale Factor:缩放系数,模型的缩放
Use File Scale:是否开启文件压缩
File Scale:文件的缩放
Mesh Compression:网格压缩

  • Off 不压缩
  • Low 低压缩
  • Medium 中等压缩
  • High 高压缩

Read/Write Enabled:是否启用读/写操作
Optimize Mesh:优化网格
Import BlendShapes:导入混合模型
Generate Colliders:生成碰撞体
Keep Quads:开启则网格采用四边形,否则采用三角形
Index Format:索引格式,定义网格索引缓冲区的大小

  • Auto:导入网格是自动选择16为还是32为索引
  • 16 bit:使Unity在导入网格物体时始终使用16位索引
  • 32 bit:使Unity在导入网格物体时始终使用32位索引

Weld Vertices:焊接顶点,通过减少网格的总数,可以优化网格上的顶点数,默认选项
Import Visibility:是否可见,导入FBX时启用MeshRenderer组件
Import Cameras:是否导入相机
Import Lights:是否导入光
Preserve Hierarchy:保留层次结构,就是模型对象在Hierarchy里的层级结构(我认为)
Swap UVs:交换UV。如果光照贴图识别了错误的UV通道,选中该项,可以交换第一、第二UV通道
Generate Lightmap UVs:生成光照贴图UV通道,如果勾选此项会出现Advanced高级选项

  • Hard Angle:硬边角度,该选项用来控制相邻三角面夹角的阀值,可根据网格的形状去调节,设置哪些边将作为硬边和接缝处理。如果设置这个值为180度,那么所有的边角都会被圆滑,默认值为88
  • Pack Margin:紧缩间隔。这个选项控制UV坐标簇的间隔,会尽量减少UV坐标簇的间隔,从而在最大程度上利用生成光照贴图资源,默认值为4
  • Angle Error :角度误差。网格面片夹角可能影响的最大UV角度误差,用来控制给予原始网格影响UV坐标簇相似程度的百分比(值越大相似三角面越多)。设置一个较小的数值可以避免烘焙光照贴图时产生问题,默认设置为8
  • 面积误差。网格面积可能影响的最大UV面积误差,用来控制基于原始网格相对UV坐标簇面积相似程度的百分比,将此值设置一个较大的数值可以得到更完整的UV坐标簇,默认设置15
  • 引用链接

Normals:法线,定义是否以及如何计算法线,这对于优化游戏大小很有用

  • Import:默认选项,从文件导入法线
  • Calculate:根据平滑角(Smoothing angle)1计算法线,如果选择,则启用“ 平滑角度”,值可在0~180之间调,整默认为60
  • None:无,如果模型即不需要法线贴图映射,也不需要实时光照影响,则选择该选项

Normals Mode:法线模式,定义Unity如何计算法线,仅在将法线设置为Calculate时可用

  • Unweighted Legacy:为加权(旧版),在将项目迁移到最新版本的Unity之前,这是所有导入的FBX预制件的默认设置
  • Unweighted:为加权,法线不加权
  • Area Weighted:面积加权,发现由模型的面积加权
  • Angle Weighted:角度加权,法线由每个面上的顶角加权
  • Area and Angle Weighted:面积和角度加权,默认选项

Smoothing Angle :平滑角度,设置网格面片的夹角阀值,作用于调节法线贴图切线
Tangents:切线

  • Import:依据在三维软件中设置的方式计算切线和副法线
  • Calculate Tangent Space:计算切线空间,默认选项,使用MikkTSpace计算切线和副法线
  • Calculate Legacy:传统计算,使用传统算法计算切线
  • Calculate Legacy - Split Tangent:计算-切线正切,使用传统算法计算切线,并跨UV图表进行拆分,如果法线贴图照明被网格上的接缝破坏,就选择此选项
  • None:不导入顶点切线
———————————————————————————————————————————————————————————————————————————————————
Rig 装置

Unity3D 动画控制器 Animator Component_第10张图片
Animation Type:动画类型

  • None:无,不存在动画
  • Legacy:旧版动画系统
  • Generic:通用动画系统
  • Humanoid:人型动画系统

Avatar我的理解就是骨骼骨骼
Avatar Definition:Avatar 定义

  • Create from this model:从此模型创建
  • Copy from other Avatar:从其他 Avatar 复制

Configure…:指向其他模型上设置的 Avatar 配置
Optimize Game Object:优化游戏对象

———————————————————————————————————————————————————————————————————————————————————
Animation

上部分
Unity3D 动画控制器 Animator Component_第11张图片
Import Animation:勾选后才可以导入动画到 Unity 工程中
Bake Ainmations:这个选项只在使用 Humanoid 动画并且使用到了 IK 特性的时候才可用
Anim.Compression:应用于此网格物体的动画的压缩类型

  • Off:关闭动画压缩
  • Keyframe Reduction:压缩关键帧,就是 Unity 会自行重采样动画的关键帧
  • Optimal:最优化压缩

当Anim.Compression为Keyframe Reduction 或者 Optimal 时,才会出现以下三个用于控制压缩选项的系数配置

  • Rotation Error:旋转误差
  • Position Error:位置误差
  • Scale Error:比例误差

越小精度就越高,动画的失真度就越小
Animated Custom Propertie:导入任何您指定为自定义用户属性的FBX属性
Clips:动画片段
Start:开始时间
End:结束时间

下半部分
Unity3D 动画控制器 Animator Component_第12张图片
Loop time:动画是否循环播放

  • Loop Pose:用于控制动画循环播放时,从结束帧切换到起始帧时,动画的动作是否可以无缝的衔接上
  • Cycly Offset:用于设置控制循环的时候起始帧偏移量

Root Transform Rotation:表示为播放动画的对象的旋转方面的信息

  • Bake Into Pose:不勾选表示动画产生的旋转或位移会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上
  • Based Upon:基准点
    • Original:动画文件中指定的旋转值
    • Root Node Rotation:动画文件中指定的根节点旋转信息

Root Transform Position(Y):表示为播放动画的对象的位置 y 轴方面的信息

  • Bake Into Pose:不勾选表示动画产生的旋转或位移会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上(Y轴上不会产生位移)

  • Based Upon:基准点

    • Original:表示基准点使用在动画文件中预设好的值
    • Center of Mass:表示基准点使用质量中心,表现为人物下半身会嵌入地面
    • Feet:表示基准点使用第一帧的脚

Root Transform Position(XZ):表示为播放动画的对象的位置 XZ 平面方面的信息

  • Bake Into Pose:不勾选表示动画产生的旋转或位移会应用到播放动画的主体对象上,勾选则表示不会应用到播放动画的主体对象上(在XZ面上不会产生位移)

  • Based Upon:基准点

    • Original:表示基准点使用在动画文件中预设好的值
    • Center of Mass:表示基准点使用质量中心,表现为人物下半身会嵌入地面
    • Feet:表示基准点使用第一帧的脚

Mirror:左右镜像,比如一个动画是往左前方跑,勾选Mirror后,该动画网右前方跑
Additive Reference Po:一个参考姿势
在这里插入图片描述

  1. 为动画添加曲线,可根据曲线的变化来改变数值
  2. Curve是Pameters参数,可通过GetFloat(“Curve”)获得该变化值
  3. 曲线可自编辑

Unity3D 动画控制器 Animator Component_第13张图片
帧事件,为动画添加帧事件
在固定的时间位置添加事件,当动画播放到该位置时会执行该方法
此方法需要在该动画附着的游戏对象身上
Function:方法名
Float,Int,Sting,Object:参数(可选)
在这里插入图片描述
为动画添加遮罩
Definition:遮罩定义

  • None:没有遮罩
  • Copy From Other Mask:复制其他的遮罩
    • Source:用来选择遮罩
  • Create From This Model:在此动画的骨骼上建立遮罩

Transform:会显示遮罩/当前骨骼的信息,需要设为遮罩的部分勾选即可
在这里插入图片描述
在Root Motion Node中选择根运动节点,当播放完改动画后会恢复到跟运动动画的状态
Import Messages不知道试干嘛的

———————————————————————————————————————————————————————————————————————————————————
Materials 材质

Unity3D 动画控制器 Animator Component_第14张图片

———————————————————————————————————————————————————————————————————————————————————

IK动画

  1. 反向动力学动画,可以理解为提线木偶。要使用IK动画需要先在动画所在层勾选IK Pass
  2. 在脚本中,我们IK的代码要写在 OnAnimatorIK方法中才能生效
  3. 可以使用IK动画的部位有 头部,左手,左脚,右手,右脚

Unity3D 动画控制器 Animator Component_第15张图片
头部IK设置:

// 设置权重
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);

动画状态机(继承StateMachineBehaviour)

检测状态机中动画切片(Anamation)的运行状态
OnStateEnter :进⼊状态时执⾏⼀次
OnStateUpdate: 在状态中,每帧执⾏⼀次
OnStateExit: 离开状态时执⾏⼀次
OnStateMove: 执⾏动作的时候每帧执⾏⼀次
OnStateIK: 执⾏IK动画时每帧执⾏⼀次

动画制作 Animation View

使用快捷键Ctrl + 6或Window ==》Animation 打开Animation的编辑窗口
Unity3D 动画控制器 Animator Component_第16张图片
点击 Create 创建动画片段
在这里插入图片描述
点击 Add Property 选择需要做动画的部分,点击 + 进行编辑
Unity3D 动画控制器 Animator Component_第17张图片
红点录制功能,先选择关键帧或者在需要的地方,点击录制按钮即可在场景中进行操作即可完成录制并建立关键帧
之后的是 第一帧 上一帧 暂停/开始 下一帧 最后一帧 最后是当前所在帧数
New Animation:可以切换动画片段,也可以添加新的动画片段
Samples:表示当前动画的总帧数,可以修改
菱形+:添加关键帧
竖条+:添加帧事件,插入帧事件后即可在InspectorFunction里选择方法

你可能感兴趣的:(Unity基础知识,unity)