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 与脚本交互

  1. 事件驱动

    • 通过参数触发状态机过渡:SetTrigger, SetBool, SetFloat
  2. 直接控制

    • 强制切换动画:Play / CrossFade
  3. 动画事件

    • 在 Animation Clip 中添加事件,运行时调用脚本方法。

实践提示

  • UI 动画常用 CrossFade + Animator Parameter 控制渐变。
  • 角色动画优先用参数 + 状态机驱动,减少硬切换。

📊 6. 技术对比与应用示例

技术 用途 示例
Play 立即播放状态 anim.Play("Run")
SetTrigger 状态机过渡 anim.SetTrigger("Jump")
Blend Tree 动画混合 移动速度控制走/跑
Layers 多层动画叠加 基础动作 + 武器动作
Root Motion 使用动画位移驱动角色 人形角色行走
UpdateMode 更新时机控制 与物理同步或独立时间

posted @ 2026-01-14 20:46  高山仰止666  阅读(5)  评论(0)    收藏  举报