动画系统:
旧动画系统(帧动画系统:关键帧驱动,关键帧记录的数据进行插值移动)
1、添加Animation,添加到父物体上
2、添加动画片段
3、添加关键帧(子物体的坐标是相对于父物体的坐标),帧之间插值移动,关键帧可以复制粘贴
关键帧的插值曲线
改成线性插值,右键打开选项,Both Tangents选择Linear
采样率(Samples):调节动画快慢,调小变慢
添加事件:
1、事件必须和Animation同级
2、选中游戏物体来编辑事件,不可以对动画片段编辑事件
3、事件会自动加载给资源里的片段,另一个物体复用时,如果该物体没有事件脚本,就会报错
(旧动画系统,片段也可以复用,要和录制片段的游戏物体的名称相同)
不推荐在动画状态机上添加事件
推荐使用代码,从列表里面获得片段,创建事件对象,通过Clip手动添加事件,运行中动态添加事件
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { Animation ani; private void Awake() { ani = GetComponent<Animation>(); //ani.clip // K帧、K动画 AnimationState testState = ani["test"]; AnimationClip testClip = testState.clip; AnimationEvent testEvent = new AnimationEvent(); testEvent.functionName = "EventTest"; testEvent.time = 0.3f; testEvent.messageOptions = SendMessageOptions.DontRequireReceiver; // 设置 如果没有接收者也不会报错 testClip.AddEvent(testEvent); } void Start () { } void Update () { } public void EventTest() { } }
片段封装在AnimationState类中
通过封装的对象获得Clip,AnimationClip的事件
AnimationEvent也是封装类,事件密闭类
消息设置
1、不需要接受者:有接受者正常执行,没有接受者也不会报错
2、必须要有接受者(默认):在动画控制器里也是默认的,所以要用代码修改
通过身上的脚本组件接收消息
Rig骨骼标签设置:
Legacy:模型使用旧动画系统,会默认为模型添加Animation
Genenal:通用骨骼,Legacy骨骼都可以改成Genenal
Humanoid:模型的骨骼要符合人形的骨骼
黄色感叹号建议修改后使用,打勾可用,打叉不可用
新动画系统(骨骼动画系统,骨骼运动驱动)
1、代码量少,效率稍高
2、状态机,可视化编辑
状态机里单个片段的速度,默认不可修改
可以使用参数修改单个片段的速度,添加IdleSpeed,修改单个片段的参数
参数和Speed是相乘的关系,Speed * IdleSpeed
ani.speed则是设置所有动画的速度
镜像
整个播放时长
Has Exit Time:默认的过渡条件
播放到81%才会过渡到下一动画
融合的时间长度0.25秒,改成0,则无融合
Fixed Duration:固定过渡,在0.25秒内,动画是不允许被打断的
设置过渡条件,速度大于小于0.1
用子状态机盒子封装3个运动状态
返回子状态机上一层
方法一:设置连线到Move状态机本身
方法二:设置连线到Move状态机的Run状态
设置连线到Base Layer上一层的Idle状态
查看连线的状态,选择对应的连线,可以设置对应的过渡条件
过渡条件:并且的关系
过渡条件:或者的关系,设置两条连线,一条添加速度,一条添加转向
复杂的连线 -> 融合树
1D融合树,由1个参数控制
蓝色的三角:动画的权重过渡,两个三角形的交点各占50%相互融合
2D的融合树:需要2个参数控制
第1个参数:x轴
第2个参数:y轴
通过拖动方块,设置片段在坐标系的位置,可以设置片段的速度和轴值
红点:代表参数的集合
圆圈:代表有那几个动画参与融合
修改数字,微调数据
2D简单方向:1个方向只有1个节点(片段)
2D的自由方向和2D的笛卡尔坐标系:1个方向只有多个节点(片段),可以由多个节点融合
Direct(很少用):通过多个参数控制人物的表情,多个参数控制一个状态
新动画系统 - 动画的重定向:
不同的模型,可以使用同一动画片段,只要模型是类人性的
有模型无动画,模型和动画文分开
新动画系统自动生成Avatar骨骼配置文件
骨骼节点的映射
实心圆圈骨骼必须有
虚线圆圈骨骼可以无