How to Develop a Game
Animation System
PublishDate: 2025-06-01 | CreateDate: 2025-06-01 | LastModify: 2025-06-01 | Creator:ljf12825

Unity现存两套动画系统,较早的是Legacy Animation,现代的是Mecanim;它们的设计理念、功能和灵活性由很大的不同

Legacy Animation(传统动画系统)

Legacy Animation是Unity最初的动画系统,主要用于较为简单的动画控制,依赖于直接在物体上设置Animation Clips和控制这些片段的播放

核心特性

使用方式

Animation anim = GetComponent<Animation>();
anim.Play("Run");

局限性:

适用场景:

Mecanim(现代动画系统)

Mecanim 是 Unity 后期引入的动画系统,极大地增强了动画的控制和灵活性。它提供了丰富的功能,特别是 动画状态机 和 层(Layer),适合处理复杂的动画逻辑,特别是对角色动画和多动画重叠有较高要求的项目

核心特性

使用方式

优势:

适用场景:

Mecanim vs Legacy Animation

特性/功能MecanimLegacy Animation
动画控制状态机、参数、混合树、层,支持复杂控制基于动画片段和过渡的简单控制
层级控制支持多个动画层,独立控制不同部分动画不支持层级控制,所有动画共享同一个状态
过渡条件支持复杂过渡条件(例如布尔值、触发器、浮动)只能通过简单的播放控制
混合控制支持 Blend Tree 平滑过渡不支持混合过渡
根运动支持根运动,动画驱动物理位移不支持根运动
灵活性与扩展性高,适合复杂动画和大规模项目较低,适合简单动画
适用场景复杂的角色动画、游戏中的多个动画状态和过渡简单的动画控制,适用于小项目或小物件动画

Animator Controller

Animator Controller 是 Unity 中用来管理和控制动画状态机的核心工具,它将动画片段、状态、过渡、参数等整合起来,从而实现复杂的动画控制逻辑。简而言之,Animator Controller 是管理游戏对象动画的指挥官,它控制着对象在游戏运行时如何在不同的动画状态之间切换

构成

Animator Controller主要由以下几部分构成:

  1. 动画状态(Animation States)
  1. 过渡(Transitions)
  1. 参数(Parameters)
  1. 状态机(State Machine)
  1. 混合树(Blend Tree)
  1. 层(Layer)
  1. 虚拟角色模型(Avatar)

工作原理

Animator Controller 的工作流程可以通过以下几个步骤来理解:

  1. 创建动画状态:首先,在 Animator Controller 中为每个动画创建状态。比如,走路动画、跳跃动画、攻击动画等。
  2. 定义过渡条件:在状态之间定义过渡(Transition),并设置过渡的条件。例如,设置触发器(Trigger)来切换到攻击状态,或者设置布尔值来控制角色是否奔跑。
  3. 使用参数:参数是触发动画状态的关键。通过参数,你可以控制状态机中的状态切换逻辑。例如,使用浮动值控制角色的速度,以决定是播放跑步动画还是走路动画。
  4. 播放动画:当游戏运行时,Animator Controller 根据当前的动画状态和参数的变化来自动播放动画。例如,当角色的速度大于某个值时,播放跑步动画;当角色按下攻击键时,播放攻击动画。
  5. 控制层和权重:你可以使用多个动画层来分别控制不同部分的动画,例如上半身和下半身。层的权重可以决定每个层对最终动画的影响程度。

动画状态机图(Animator Window)

在 Animator Window 中,你可以直观地查看和编辑 Animator Controller 的结构。图中包含了动画状态、过渡、参数等元素。你可以通过拖拽、添加状态、设置过渡条件等方式来设计你的动画逻辑

动态控制

在运行时,可以通过代码控制Animator Controller

// 获取Animator组件
Animator animator = GetComponent<Animator>();

// 设置bool
animator.SetBool("isRunning", true);

// 设置trigger
animator.SetTrigger("Attack");

// 设置float
animator.SetFloat("Speed", 5.0f);

API

Animator inherits from Behaviour

Unity Scripting Animator

Animation Clips

在 Unity 中,Animation Clips 是用于存储和播放动画的关键资源。它们包含了物体在一段时间内的各种 动画数据,如 位置、旋转、缩放 以及其他的动画属性(例如材质、颜色、透明度等)。Animation Clip 充当了动画的核心文件,控制物体的运动和变化。

概述

创建与使用

创建Animation Clip

AnimationClipPanel

编辑Animation Clip 通过Animation窗口,可以编辑一个Animation Clip:

  1. 选择物体:选择你想要的动画化的物体
  2. 打开Animation窗口:点击Window > Animation > Animation 打开 Animation窗口
  3. 录制关键帧:点击录制按钮(Red Record)开始录制动画,设置物体的不同状态(位置、旋转、缩放等),Unity会自动为这些状态添加关键帧
  4. 手动添加关键帧:在Timeline中点击任意时间点插入关键帧(可以手动修改每个属性的值)

Animation Clip与关键帧

一个Animation Clip的本质就是一系列关键帧的时间序列。这些关键帧代表某个时间点物体的状态

关键帧(Keyframe)

编辑关键帧

动画的播放与控制

Animation Clip可以通过以下两种主要方式进行播放和控制

  1. Legacy Animation系统
Animation anim = GetComponent<Animation>();
anim.Play("Run");  // 播放名为 "Run" 的 Animation Clip
  1. Macanim动画系统
Animator animator = GetComponent<Animator>();
animator.SetTrigger("Jump");

动画片段的压缩与优化

Unity 支持在 Animation Clip 上进行压缩,以减少游戏资源占用并提高性能。

动画片段的导入

如果在外部软件(如 Maya、Blender 或 3ds Max)中创建了动画,导出时可以将 Animation Clip 直接导入到 Unity 中。Unity 会自动识别 骨骼动画 和 面部表情,并将它们作为 Animation Clip 导入

Animator Component

AnimatorPanel

Animation Event

Root Motion

Animator Parameters

Playables API

动画优化