Skip to content

Transition 过渡

unity-animation-transition-deep-dive

一句话理解

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 -> DeadLoop

Exit 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,Float

Transition:

c
Idle -> Run
Has Exit Time:关
Condition:Speed > 0.1
Duration0.1
Run -> Idle
Has Exit Time:关
Condition:Speed < 0.1
Duration0.1

代码:

c
animator.SetFloat("Speed", Mathf.Abs(moveX));

这种移动类动画一定要反应快,所以通常关闭 Has Exit Time

案例 2:攻击动画

参数:

c
Attack,Trigger

Transition:

c
Any State -> Attack
Has Exit Time:关
Condition:Attack
Duration0.05

然后:

c
Attack -> Idle
Has Exit Time:开
Exit Time:0.91
Condition:无
Duration0.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 transitionsAnimation parameters

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0