Unity-Animation
Unity-Animation
Editor
动画片段集(Animation Clips)
动画数据被存放在动画片段集中,如人物的跑动、跳跃,路灯的亮度变化等数据。动画片段集分为两个部分:
Values:某个属性的值
Bindings:该动画片段集绑定的对象物体的属性,如位置,旋转,光照强度等
编辑窗口
注:动画只有附着在一个具体的游戏对象上(该动画有上下文)才可以被编辑关键帧
改变时间线显示单位:可调整为秒单位或帧单位,如下图展开菜单栏的前两项
显示帧数:需要先勾选Show Sample Rate(如上图),表示1秒内显示多少帧,如下图Samples的位置
预览模式(Preview Mode):
该模式下,时间线和属性会蓝色高亮,该模式用于编辑关键帧
记录模式(Record Mode):
进入模式后,时间线会变红,在该模式下添加的任何绑定、关键帧、曲线的修改都会被记录到动画中,可用于自行添加关键帧
切换Animation Clips:
可以在当前的Animator中新建Clip,也可以切换到已存在的一个Clips上编辑
筛选动画曲线:
点击下图中的按钮后,左栏只会显示游戏对象中存在的绑定
添加关键帧和事件:
在选定的帧点击创建事件按钮后,就可以设置动画事件,如果该动画具有上下文,则直接选择脚本中的函数
Dopesheet Mode:
只会显示绑定量在某个时间结点是否有关键帧
Curves Mode:
能够显示每一帧的属性值
曲线编辑模式如下图:
- Clamped Auto:平滑接近关键帧
- Free Smooth: 自由编辑曲线
- Flat: 曲线的切线时水平的
- Broken: 左右的切线不平行
- Free:自由编辑
- Linear:相邻关键帧用直线连接
- Constant:保持前一个关键帧的值不变,直到下一个关键帧发生突变,图像类似于脉冲信号
- Weighted:可以控制曲线的长度
Ripple Editting:
勾选后,关键帧的移动能够带动后面的关键帧移动
勾选前:
勾选后:
移动黄色区域后:
曲线模式同样能够整块编辑
动画转换(Animation Transaction)
- Has Exit Time: 当前动画只有播放到指定的时间后才能退出,可用于动画的流畅衔接
- Exit Time: 退出时间和动画完成时间的比例
- Fixed Duration: 选中时以秒来计算转换持续时间,否则按帧计算
- Transition Duration: 转换持续时间
- Transition Offset: 下一个动画从哪个位置开始播放,即图中1:00开始经过30s的位置
- Interruption Source: 能够被某个动画打断转换,例如该值设置为Current State,代表动画转换时,如果当前动画被播放,则可以打断转换,并且被打断后从头开始播放动画
- Ordered Interruption: 打断是否有先后顺序
Animator
动画系统的整体结构如下:
动画参数:
- Floats
- Integers
- Booleans
- Triggers
Animation Blending
动画混合,指的是对于某个属性值而言,其最终值是多个动画的加权平均数
混合树(Blending Tree)
类型:
- 1D:可以通过一个参数来混合多个动画
- 2D Simple Directional:2个参数控制动画,但每个轴上只有2个动画
- 2D Freeform Directional:每个方向可以有多个动画
- 2D Freeform Cartesian:参数可以代表不同的概念,不仅仅是PosX和PosY
- Direct:每个动画通过一个参数直接调节,多个动画可以叠加
对于每个Motion,有下列参数需要注意:
临界值(threhold):该动画达到最大混合权重的位置,根据实际参数值到临界值的距离降低该动画的权重
时间范围设置(Time Scale setting):设置该动画的相对播放速度
混合树内也可以嵌套另一个混合树
State
每个动画机都需要管理若干个状态,状态所具有的属性如下:
Motion:设置状态的动画或者混合树
Speed:设置动画的播放速度
可以通过代码来控制播放速度的大小,勾选Parameter,在Multiplier右栏填写参数名称
Normalized Time:动画播放的相对时间,0表示开始播放,1表示播放结束
Motion Time:可以通过参数设置Normalized Time
Cycle Offset:设置动画循环开始的时间
Any State:能够从任何状态发出转换,并且该状态的转换是优先的
State Machine
可以像创建状态一样创建状态机
状态机的转换:
可以从状态机内部直接转换到状态机外部的某个状态,也可以先转换到状态机自身,再进行二次转换;状态机的转进同理
Layers
动画层索引(Animator Layer indices):动画层索引自顶向下递增,初值为0
动画层权重(Animator Layer weights):决定每个动画层的混合权重
蒙版(Masking):可以设置哪些游戏对象受到动画影响,例如可以只在人物的上半身设置攻击动画的模板
混合类型:
- Override blending:类似于混合树混合,动画层之间的权重不可叠加
- Additive blending:动画层的权重可以叠加
同步(Sync):当前动画层发生转换时,同步的动画层也发生转换,可以设置Timing选项调整权重(?)
Scripts
设置动画机的参数:
1 |
|
该函数有2个重载,第一个参数可以是字符串,也可以是该字符串的哈希值(调用Animator.StringToHash(str)
转换,后者的性能更好
获取动画机的参数:
1 |
|
控制动画层权重:
1 |
|
控制动画播放:
1 |
|
状态和动画片段的信息:
1 |
|