【Unity动画捕获插件】Animation Recorder 运行时与编辑器动画捕获的完整实现思路详解
在 Unity 动画制作流程中,动画通常来自 DCC 工具(如 Maya、Blender),或由 Animator Controller 驱动播放。但在越来越多的应用场景中,“动画并不是提前做好的,而是运行时产生的”:例如 VR 体感动作、程序驱动的骨骼运动、BlendShape 表情捕捉、玩家行为回放等。
Animation Recorder 正是为这一类需求而设计的工具。它的核心价值在于:
把“实时变化的数据”转化为“可编辑、可导出、可复用的动画资源”。
本文将从整体架构 → 核心录制机制 → 数据结构 → 导出原理 → VR 扩展几个层面,系统解析 Animation Recorder 的工作原理。

一、Animation Recorder 的整体架构设计
从功能上看,Animation Recorder 同时覆盖了 Editor 模式 与 运行时(Runtime) 两种动画捕获场景,其整体架构可以拆解为四个核心模块:
- 数据采集层(Recorder Layer)
- 时间轴与关键帧管理(Timeline & Keyframe)
- 数据序列化与动画重建(Serialization & Reconstruction)
- 导出系统(Export Pipeline)
它并不是简单地“录屏式记录动画”,而是真正意义上的动画数据采集系统。

二、动画捕获的核心思想:采样而不是回放
Animation Recorder 的底层思想可以用一句话概括:
在每一帧,对目标对象的“动画驱动属性”进行采样,并保存为时间序列。
这些被采样的属性主要包括两大类:
1️⃣ 骨骼动画(Skeleton Animation)
-
Transform.localPosition -
Transform.localRotation -
Transform.localScale
插件会遍历 Animator 所绑定的 骨骼层级结构(Transform Hierarchy),对每一个骨骼节点进行采样。
2️⃣ BlendShape 动画(Morph Target)
-
SkinnedMeshRenderer.GetBlendShapeWeight(index)
每一个 BlendShape 实际上就是一个 float 曲线,Animation Recorder 会将其视为与骨骼动画同等重要的动画通道。

三、Recorder 的工作流程拆解
1. 录制启动(Run Animator)
当你在 Animation Recorder 窗口点击 Run Animator 时,插件内部会做几件关键事情:
-
锁定当前选中的 GameObject -
获取其 Animator 组件 -
解析 Animator 绑定的 Avatar / Skeleton -
构建一份“可记录节点列表”
这一步本质上是在做 动画目标分析(Target Analysis)。
2. 实时采样(Per-Frame Recording)
在录制过程中,每一帧都会执行如下逻辑:
当前时间 → 遍历骨骼 → 记录 Transform → 遍历 SkinnedMesh → 记录 BlendShape
关键点在于:
- 采样基于 Time.deltaTime
-
每一帧的数据都会被打上时间戳 -
数据并不会立即生成 AnimationClip
而是先进入 内存中的时间序列缓存结构。

四、关键帧与时间轴管理机制
1️⃣ 时间轴并不是“帧索引”
Animation Recorder 并不是简单地记录「第 N 帧的状态」,而是构建了一个 浮点时间轴(float time)。
这意味着:
-
支持不同帧率下的重建 -
支持动画曲线平滑与插值 -
更利于跨平台与跨工具导出(GLB / FBX)
2️⃣ 动画通道(Animation Channel)
在内部,每一种动画属性都会被抽象为一个 动画通道:
-
一个骨骼的 Position 是 3 个通道(X/Y/Z) -
Rotation 是 4 个(Quaternion) -
每个 BlendShape 是 1 个通道
最终形成的是一个类似这样的结构:
AnimationData ├─ Bone_Head.Rotation.X → Keyframes[] ├─ Bone_Head.Rotation.Y → Keyframes[] ├─ BlendShape_Smile → Keyframes[]
这与 Unity AnimationClip 的底层结构高度一致。
五、动画修改能力的实现原理
Animation Recorder 并不只是“录完就完了”,它支持对捕获数据进行修改,这背后依赖两个机制:
1️⃣ 中间数据结构(非 AnimationClip)
在导出前,动画数据始终以 自定义数据结构存在,而不是直接写入 AnimationClip。
好处包括:
-
可删除、合并、裁剪动画段 -
可对某些骨骼或 BlendShape 做过滤 -
可进行动画叠加与拼接
2️⃣ 非破坏式编辑(Non-Destructive)
修改操作并不会影响原始采样数据,而是基于拷贝或引用层进行,这使得插件非常适合作为:
- 动画编辑器
- 调试工具
- 动画重建工具

六、导出系统的技术原理
1️⃣ Generic Animation Clip 生成
在 Unity Editor 中创建 AnimationClip 的流程是最基础的一种:
-
遍历所有动画通道 -
将 Keyframe 写入 AnimationCurve -
绑定到对应的路径(Transform Path)
这是 Lite 版本也支持的能力。
2️⃣ GLB 导出的实现思路
GLB(glTF Binary)是一种跨平台动画格式,Animation Recorder 的导出逻辑大致为:
-
将骨骼结构转为 glTF Node -
将动画通道映射为 glTF Animation Sampler -
时间轴 → input -
数值曲线 → output
由于 glTF 原生支持骨骼动画和 Morph Target,这使得:
-
移动端 -
WebGL -
VR 应用
都能非常自然地使用这些动画数据。
3️⃣ FBX 导出(Windows)
FBX 导出依赖平台相关 SDK,因此只在 Windows 下提供。其本质是:
-
构建 FBX Skeleton -
将时间序列写入 FBX Animation Layer -
生成可被 Maya / Blender 读取的动画文件

七、VR Body Tracking 的工作机制
Animation Recorder 与 Meta Movement SDK 的结合,是一个非常典型的应用场景。
其核心逻辑是:
-
VR SDK 驱动 Avatar 骨骼实时运动 -
Animation Recorder 仅作为“数据监听者” -
每一帧采样 VR 设备驱动后的骨骼状态
这意味着:
插件本身并不关心“动画来自哪里”,它只关心 Transform 和 BlendShape 的最终状态。
这也是它能适配各种体感、程序动画、AI 驱动动画的根本原因。
八、典型应用场景的技术价值总结
从技术角度看,Animation Recorder 的价值主要体现在:
- 运行时动画资产化
- 动画调试可视化
- 程序动画 → 美术动画的桥梁
- VR / AR 动作捕获的低门槛实现
它并不是 Animator 的替代品,而是一个连接“实时行为”与“动画资源”的中间层工具。
九、结语
Animation Recorder 本质上解决的是一个长期存在、但常被忽视的问题:
Unity 动画系统“只能播放动画”,但很难“反向生成动画”。
通过对骨骼与 BlendShape 的实时采样、时间轴管理和多格式导出,它让动画不再只是美术资产,而成为一种可记录、可分析、可重构的数据形态。
如果你正在做:
-
VR 动作捕捉 -
程序驱动动画 -
动画编辑工具 -
或动画调试系统
那么 Animation Recorder 的实现思路,本身就非常值得深入学习和借鉴。
夜雨聆风
