Unity Animator 技术文档
Animator 是 Unity Mecanim 动画系统的核心组件,用于控制角色、UI、场景对象的动画播放、过渡和混合。它包括脚本 API (Animator 类) 和编辑器层面的 Animator Controller。以下文档为完整技术概览,涵盖属性、方法、状态机、脚本交互及最佳实践。
🎯 1. Animator 组件概览
- Animator:挂载在 GameObject 上,驱动动画状态机。
- Animator Controller:资源文件,定义动画状态、过渡条件和 Blend Tree。
- Avatar:人形角色骨骼映射,用于 Root Motion 与动画骨骼绑定。
- 应用场景:角色动作(走、跑、攻击)、UI 动画、环境对象动画。
🔑 2. Animator 核心属性
| 属性 | 说明 |
|---|---|
runtimeAnimatorController |
绑定的 Animator Controller 资源 |
avatar |
人形骨骼映射 |
applyRootMotion |
是否使用动画位移驱动角色移动 |
updateMode |
更新模式:Normal / AnimatePhysics / UnscaledTime |
speed |
动画播放速度 |
isHuman / isInitialized |
是否为人形角色,是否已初始化 |
parameters |
Animator Controller 中定义的参数列表 |
layerCount |
动画层数量 |
hasBoundPlayables |
是否有绑定的 Playable(用于 Timeline 或脚本驱动) |
最佳实践:Root Motion 用于角色位移,UI 或特效动画通常关闭 Root Motion。
🔑 3. Animator 常用方法
| 方法 | 说明 | 示例 |
|---|---|---|
Play(stateName, layer, normalizedTime) |
立即播放指定状态 | anim.Play("Run") |
CrossFade(stateName, transitionDuration) |
平滑过渡到指定状态 | anim.CrossFade("Jump", 0.1f) |
SetTrigger(name) / ResetTrigger(name) |
触发/重置触发器参数 | anim.SetTrigger("Attack") |
SetBool(name, value) / GetBool(name) |
布尔参数 | anim.SetBool("IsRunning", true) |
SetInteger(name, value) / GetInteger(name) |
整数参数 | anim.SetInteger("WeaponIndex", 2) |
SetFloat(name, value) / GetFloat(name) |
浮点参数 | anim.SetFloat("Speed", 1.5f) |
GetCurrentAnimatorStateInfo(layer) |
获取当前状态信息 | var info = anim.GetCurrentAnimatorStateInfo(0) |
GetNextAnimatorStateInfo(layer) |
获取下一个状态信息 | 同上 |
Rebind() |
重置 Animator 并重新绑定骨骼 | anim.Rebind() |
Update(deltaTime) |
手动更新 Animator | anim.Update(Time.deltaTime) |
优化提示:尽量用参数 + 状态机驱动动画,而非频繁调用
Play,性能更优。
🔑 4. Animator 状态机与过渡概念
- State(状态):绑定一个 Animation Clip,定义动作。
- Transition(过渡):状态间的切换,受参数控制,可设置淡入淡出时间。
- Blend Tree(混合树):根据参数值平滑混合多动画,常用于移动方向、速度。
- Layer(层):多层动画叠加,例如基础动作层 + 上半身动作层。
提示:
- Layer 权重可用于分层动作混合(如上半身开枪,下半身跑步)。
- Blend Tree 可以减少状态数量,让动画更自然。
🔑 5. Animator 与脚本交互
-
事件驱动
- 通过参数触发状态机过渡:
SetTrigger,SetBool,SetFloat。
- 通过参数触发状态机过渡:
-
直接控制
- 强制切换动画:
Play/CrossFade。
- 强制切换动画:
-
动画事件
- 在 Animation Clip 中添加事件,运行时调用脚本方法。
实践提示:
- UI 动画常用
CrossFade+ Animator Parameter 控制渐变。- 角色动画优先用参数 + 状态机驱动,减少硬切换。
📊 6. 技术对比与应用示例
| 技术 | 用途 | 示例 |
|---|---|---|
Play |
立即播放状态 | anim.Play("Run") |
SetTrigger |
状态机过渡 | anim.SetTrigger("Jump") |
| Blend Tree | 动画混合 | 移动速度控制走/跑 |
| Layers | 多层动画叠加 | 基础动作 + 武器动作 |
| Root Motion | 使用动画位移驱动角色 | 人形角色行走 |
| UpdateMode | 更新时机控制 | 与物理同步或独立时间 |

浙公网安备 33010602011771号