引言:动画"抽风"的根源在机制理解
角色滑步、攻击动画播到一半瞬移回待机、过渡条件改了数遍仍然抽搐——这类问题翻遍脚本代码往往找不到 bug,因为根源在 Animator 的工作机制:状态如何评估、姿态如何采样混合、根运动如何应用。理解这套机制,才能从被动调参转为主动设计。
一、Animator 与动画状态机
1.1 组件职责与数据关系
Animator 是动画系统的运行时调度器,其工作依赖三类资产:
- AnimatorController:状态机定义(状态、过渡、参数、层);
- AnimationClip:关键帧数据,每帧存储骨骼的 TRS 变换;
- Avatar:骨骼映射与人体结构定义,使不同骨架可以复用同一套动画(Humanoid 重定向的基础)。
脚本侧通过参数(Parameter)向状态机输入信号:
using UnityEngine; [RequireComponent(typeof(Animator))] public class CharacterAnimationDriver : MonoBehaviour { private Animator animator; // 用哈希缓存参数名,避免每帧字符串查找 private static readonly int JumpHash = Animator.StringToHash("Jump"); private stat