Appearance
Transition 过渡
一句话理解
Transition 就是 Animator 里两个状态之间的“过渡线”。
c
Idle -> Run
Run -> Idle
Any State -> Attack
Attack -> Idle
Jump -> Fall
Fall -> Land它决定三件事:
c
什么时候切?
要不要等当前动画播到某个点?
两个动画混合多久?最核心设置
Conditions:切换条件。
比如:
c
Idle -> Run:Speed > 0.1
Run -> Idle:Speed < 0.1
Any State -> Attack:Attack Trigger
Jump -> Fall:VerticalSpeed < 0如果一个 Transition 有多个条件,必须全部满足才会切。
Has Exit Time:是否等当前动画播到指定时间再切。
开:等当前动画播到 Exit Time 才允许切
关:条件满足就立刻切移动动画通常关:
Idle -> Run
Run -> Idle
Run -> Jump攻击动画、受击动画通常开:
Attack -> Idle
Hit -> Idle
Death -> DeadLoopExit Time:退出时间,用标准化时间表示。
0 = 动画开始
0.5 = 播到一半
1 = 播完一遍比如 Exit Time = 0.75,意思是动画播放到 75% 时才允许过渡。
Transition Duration:混合时长。
c
短:动作切得干脆
长:动作切得柔和一般建议:
c
移动状态:0.05 - 0.15
攻击状态:0.02 - 0.1
待机到普通动作:0.1 - 0.2案例 1:Idle 和 Run
参数:
c
Speed,FloatTransition:
c
Idle -> Run
Has Exit Time:关
Condition:Speed > 0.1
Duration:0.1
Run -> Idle
Has Exit Time:关
Condition:Speed < 0.1
Duration:0.1代码:
c
animator.SetFloat("Speed", Mathf.Abs(moveX));这种移动类动画一定要反应快,所以通常关闭 Has Exit Time。
案例 2:攻击动画
参数:
c
Attack,TriggerTransition:
c
Any State -> Attack
Has Exit Time:关
Condition:Attack
Duration:0.05然后:
c
Attack -> Idle
Has Exit Time:开
Exit Time:0.9 或 1
Condition:无
Duration:0.05代码:
c
if (Input.GetButtonDown("Fire1"))
{
animator.SetTrigger("Attack");
}意思是:按攻击键立即进入攻击动画;攻击快播完时自动回到 Idle。
Transition Offset
Transition Offset 决定目标状态从哪里开始播。
c
0:从目标动画开头开始
0.5:从目标动画 50% 的位置开始新手一般保持 0。它常用于走路/跑步这种循环动作,让脚步相位更自然。
Fixed Duration
Fixed Duration 决定 Transition Duration 的单位。
c
勾选:Duration 按秒计算
不勾选:Duration 按当前动画标准化比例计算新手推荐先勾选,这样 0.1 就是 0.1 秒,比较直觉。
Interruption 打断
Interruption 控制“正在过渡时能不能被别的过渡打断”。
比如:
c
攻击中可以被死亡打断
攻击中可以被受击打断
翻滚可以取消普通攻击新手先别急着调这个。先把:
c
Conditions
Has Exit Time
Exit Time
Transition Duration练熟。
最常见错误
c
移动动画 Has Exit Time 没关,按键后反应慢
Transition Duration 太长,攻击软绵绵
Attack 用 Bool,忘记改回 false,导致一直攻击
Attack -> Idle 没有出口,角色卡在攻击状态
Any State -> Attack 没限制,导致攻击自己打断自己
条件名字拼错,Transition 永远不触发
多个条件同时存在,但其中一个永远不满足记住口诀:
c
Conditions 决定能不能切。
Exit Time 决定等不等播到点。
Duration 决定混多久。
移动要快,攻击要完整。参考:Unity 官方 Animation transitions、Animation parameters。