动画系统基础

12.1 动画系统概述

Unity 的动画系统(Mecanim)包含三大核心组件:

组件 作用
Animation Clip 单个动画片段(行走、跳跃、攻击等)
Animator Controller 动画状态机,控制片段切换
Animator 附加在 GameObject 上,驱动动画播放

12.2 创建动画

创建 Animation Clip

  1. 选中要添加动画的 GameObject
  2. 打开 Animation 面板(Window → Animation → Animation,或 Ctrl+6)
  3. 点击 “Create” 按钮,保存 .anim 文件
  4. 添加属性曲线(Position、Rotation、Scale、自定义属性)
  5. 在时间轴上添加关键帧,调整属性值

录制动画

Animation 面板的录制按钮(红色圆点)让你可以:

  • 在 Scene 视图中移动/旋转/缩放物体
  • Inspector 修改的属性自动记录关键帧
  • 再次点击停止录制

12.3 Animator Controller 与状态机

创建 Animator Controller

Project 面板 → Create → Animator Controller,双击打开 Animator 窗口。

核心概念

概念 说明
State(状态) 一个动画片段(或混合树)
Transition(过渡) 状态之间的切换条件
Parameter(参数) Float / Int / Bool / Trigger 类型控制变量
Any State 任何状态均可跳转到该状态
Entry 进入状态机的初始状态
Exit 退出状态机

基本状态机设置

1
2
3
4
Entry → Idle
Idle → Walk(参数:Speed > 0.1)
Walk → Idle(参数:Speed < 0.1)
Idle → Jump(参数:Trigger "Jump")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class PlayerAnim : MonoBehaviour
{
private Animator animator;

void Start()
{
animator = GetComponent<Animator>();
}

void Update()
{
float speed = new Vector2(
Input.GetAxis("Horizontal"),
Input.GetAxis("Vertical")
).magnitude;

animator.SetFloat("Speed", speed);

if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetTrigger("Jump");
}
}
}

12.4 混合树(Blend Tree)

混合树让多个动画平滑过渡混合。

1D 混合树

根据一个参数混合多个动画:

  • Speed 参数:Idle(0) → Walk(0.5) → Run(1.0)

2D 混合树

根据两个参数混合,适合方向运动:

  • Horizontal + Vertical:前/后/左/右/斜向行走

创建混合树

  1. 在 Animator 中右键 → Create State → From New Blend Tree
  2. 双击进入 Blend Tree
  3. 设置 Blend Type(1D / 2D Simple Directional 等)
  4. 添加 Motion(动画片段)并设置阈值

12.5 动画事件

在动画的特定时间点调用脚本方法。

添加事件

  1. 在 Animation 面板中选择目标帧
  2. 右键 → Add Animation Event
  3. 设置调用的函数名和参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class AttackAnimEvents : MonoBehaviour
{
// 在动画的特定帧调用
public void SpawnProjectile()
{
Instantiate(projectilePrefab, spawnPoint.position, spawnPoint.rotation);
}

public void PlayFootstep()
{
audioSource.PlayOneShot(footstepClip);
}

public void EnableHitbox()
{
hitbox.SetActive(true);
}

public void DisableHitbox()
{
hitbox.SetActive(false);
}
}

12.6 本章小结

  • Animation Clip 记录属性变化的关键帧
  • Animator Controller 通过状态机控制动画切换
  • Parameter 控制状态过渡条件(Float/Int/Bool/Trigger)
  • Blend Tree 实现多动画平滑混合
  • 动画事件在特定帧调用脚本函数
  • 角色的动画系统通常与输入控制联动

练习题

  1. 为一个 Cube 创建旋转动画(绕 Y 轴 360 度循环)
  2. 制作角色的 Idle → Walk → Run 状态机(用 Speed 参数控制)
  3. 在动画事件中添加脚步声播放
  4. 使用 Blend Tree 混合角色的前后左右行走动画
ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
Unity3D开发基础教程 系列
第 12/20 篇
分享: