Appearance
Blend Tree
一句话理解
Blend Tree 是 Animator 里的“混合动画状态”。
它不是从一个状态切到另一个状态,而是在同一个状态内部,把多个相似动画按比例混合。
比如:
Idle + Walk + Run根据 Speed 自动混合:
Speed = 0 播 Idle
Speed = 2 主要播 Walk
Speed = 6 主要播 Run
Speed = 3 Walk 和 Run 混合它和 Transition 的区别
Transition 用来切换不同状态:
c
Idle -> Jump
Run -> Attack
Attack -> IdleBlend Tree 用来混合同类动作:
c
Idle / Walk / Run
Up / Down / Left / Right
WalkForward / WalkLeft / WalkRight官方文档也强调:Blend Tree 适合混合多个性质和时机相近的动画,Transition 适合状态之间切换。
1D Blend Tree
1D 表示用一个参数控制。
最常见参数:
Speed配置例子:
Idle.anim Threshold = 0
Walk.anim Threshold = 2
Run.anim Threshold = 6代码:
c
using UnityEngine;
public class PlayerAnimator : MonoBehaviour
{
private Animator animator;
private Rigidbody2D rb;
private void Awake()
{
animator = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
float speed = Mathf.Abs(rb.linearVelocity.x);
animator.SetFloat("Speed", speed);
}
}适合:
c
待机 -> 走路 -> 跑步
慢速飞行 -> 快速飞行
轻微受伤 -> 严重受伤2D Blend Tree
2D 表示用两个参数控制。
最常见参数:
c
MoveX
MoveY用于 2D 八方向移动:
c
Idle 0, 0
MoveUp 0, 1
MoveDown 0, -1
MoveLeft -1, 0
MoveRight 1, 0代码:
c
using UnityEngine;
public class TopDownAnimator : MonoBehaviour
{
private Animator animator;
private void Awake()
{
animator = GetComponent<Animator>();
}
private void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
animator.SetFloat("MoveX", x);
animator.SetFloat("MoveY", y);
}
}适合:
c
俯视角八方向移动
3D 角色前后左右移动
瞄准方向动画
飞行方向动画怎么创建 Blend Tree
在 Animator 里:
c
右键空白处
Create State > From New Blend Tree然后:
c
双击 Blend Tree
Inspector 里选择 Blend Type
1D:选择 Speed
2D:选择 MoveX / MoveY
点击 + 添加 Motion
把 Idle、Walk、Run 等 Clip 拖进去
设置 Threshold 或 Position新手重点规则
Blend Tree 里混合的动画要“相似”。
适合混:
c
Idle / Walk / Run
上 / 下 / 左 / 右移动
轻攻击 / 中攻击 / 重攻击,前提是时机相近不适合混:
c
Idle + Attack
Run + Death
Jump + OpenDoor这些动作性质差太多,应该用 Transition。
常见坑
c
Blend Tree 参数没有在代码里更新
Speed 默认一直是 0,所以永远待机
2D 移动忘记加 Idle 的 0,0 点
Walk 和 Run 脚步时间对不上,导致滑脚
Threshold 填乱,动画混合区间怪
把攻击动画放进移动 Blend Tree记住这句:
c
Transition 管状态切换,Blend Tree 管同类动作混合。
1D 用一个参数,2D 用两个参数。
代码只负责喂参数,Blend Tree 自动混动画。参考:Unity 官方 Animation Blend Trees、1D Blending、2D Blending。