为什么要在 Unity 运行时录制动画?Unity-Runtime-Animation-Recorder 解决的 3 大核心痛点
【免费下载链接】Unity-Runtime-Animation-RecorderRecord animations in Unity runtime. Can save to .anim, maya, or FBX ASCII format.项目地址: https://gitcode.com/gh_mirrors/un/Unity-Runtime-Animation-Recorder
Unity-Runtime-Animation-Recorder 是一个 Unity 运行时录制动画的开源插件:在游戏运行中按下快捷键,就能自动记录场景里所有物体的位置、旋转、缩放变化,停止后一键生成 .anim 文件,或直接导出为 Maya(.ma)与 FBX(ASCII)格式。它专门解决"动画是物理模拟或脚本驱动出来的"这一类棘手需求。
痛点一:物理与脚本驱动的动画,关键帧根本做不出来 🎯
Unity 的物理引擎比 Maya 快得多,还能用脚本精确控制细节运动——但结果往往是这样的:
- 几百个物体同时弹跳、翻滚、掉落
- 运动轨迹由碰撞和摩擦力决定,每帧都不一样
- 想"手工打关键帧还原"?不现实
这个插件的思路是把运行时表现直接录下来:把录制脚本挂到根物体上,运行时每帧自动采样所有子 Transform,写入动画曲线,停止时自动生成 .anim 资产。
核心实现见 UnityAnimationRecorder.cs,它还支持:
- 可选录制 BlendShape(面形变形),覆盖面部表情类需求
- 录制时自动调用
EnsureQuaternionContinuity(),保证四元数曲线连续不跳变
想直接体验?项目自带示例场景:UnityRuntimeRecorder.unity
痛点二:动画要进 Maya / FBX 流程,只能人工"搬运"曲线 📦
.anim 是 Unity 专用资产。如果你的下游是 Maya 或 FBX 管线,传统做法是手工把曲线一帧帧搬过去——对多骨骼角色动画来说简直是噩梦。
这个插件内置两个导出器,把录好的曲线直接写进目标格式文件:
| 导出器 | 输出格式 | 原理 |
|---|---|---|
| MayaAnimationRecorder.cs | Maya .ma | 把录制数据追加到原始 .ma 文件末尾 |
| FbxExporter.cs | FBX ASCII | 解析源 FBX 文件,插入 AnimationCurveNode |
两个导出器使用上几乎一致,额外要求:
- Maya:选择一个包含模型信息的原始 .ma 文件(模型本身仍需从 3D 软件导出)
- FBX:源文件必须是 ASCII 格式,且节点名要与源文件完全一致(Unity 或 3D 软件有时会改节点名)
💡 FBX 导出器对非常复杂的物体存在内存限制,超大场景建议分批录制。
痛点三:人形动画跨软件导出,骨骼旋转总是"错位" 🦴
这是很多团队踩过的坑:Unity 和 Maya 对脊柱的处理方式不同。
- Maya 的骨骼多一个Joint Orient,实际脊柱旋转 = 变换旋转 + Joint Orient
- Unity 没有这个属性,记录的旋转值已经是"总和"
- 导出到 Maya 后 Joint Orient 被再叠加一次,结果动画怪异变形
Maya 导出器会自动把每个脊柱的 Joint Orient 修正为 (0, 0, 0),一次性根治这个问题,无需再手动打开 Maya 逐个调整。相关处理逻辑位于 MayaAnimationRecorder.cs 的exportToMayaAnimation流程中。
三大录制器功能速览 ⚡
| 录制器 | 输出 | 运行要求 | 典型场景 |
|---|---|---|---|
| UnityAnimationRecorder | .anim | 仅 Unity Editor | 生成 Unity 内可用的动画资产 |
| MayaAnimationRecorder | Maya .ma | 运行时脚本 | 动画回流到 Maya 工作流 |
| FbxExporter | FBX ASCII | 运行时脚本 | 对接 FBX 下游管线 |
三者共享一套顺手的功能:
- 🎹 快捷键开始 / 停止录制(默认 Q / W,可在 Inspector 修改)
- 📏 位置、旋转、缩放可分别开关
- ⏱️ 内置 TimeScale 控制:开始前把时间冻结(0.0),录制时恢复正常速度,方便逐段观察
- 🔢 可选"限制帧数"模式,录满设定帧数自动停止并导出
快速上手:4 步完成第一次 Unity 动画录制 ✅
- 把
Unity Runtime Recorder文件夹复制到项目的 Assets 目录即可,无需额外配置 - 把 UnityAnimationRecorder.cs 拖到任意 GameObject 上,它会自动记录所有子 Transform
- 在 Inspector 中点击 "Set Save Path",选择文件夹并输入文件名
- 运行场景,按 Q 开始、按 W 停止——.anim 文件即刻生成
本地没有代码?克隆仓库即可开始:
git clone https://gitcode.com/gh_mirrors/un/Unity-Runtime-Animation-Recorder录多物体卡顿?一个 Time.timeScale 技巧 🚀
模拟大量物体时容易掉帧,而掉帧会直接影响录制精度。项目给出的解法:
- 在 Project Setting 中调整
Time.timeScale,或直接使用脚本里的 ChangeTimeScale 选项 - Unity 所有物理行为都受 timeScale 影响——放慢时间再模拟录制,保证每一帧都被准确捕获
- 用脚本驱动动画时,请写进
FixedUpdate而不是Update,避免帧率波动带来的误差
辅助工具参考 TransformTracker.cs 与 ExportHelper.cs。
小结
Unity-Runtime-Animation-Recorder 用一套轻量脚本解决了 Unity 动画录制的三大核心痛点:
- 物理模拟变资产——运行时表现一键变成可复用的 .anim 动画
- 跨软件曲线搬运——自动把动画写入 Maya .ma / FBX ASCII 文件
- 人形骨骼错位——自动修正 Joint Orient,导出结果不再怪异
项目采用 MIT 协议(见 LICENSE.md),可自由用于个人与商业项目。如果你的工作流涉及 Unity 运行时动画录制、.anim 生成或 Unity 动画导出,不妨把它加进工具箱试试。
【免费下载链接】Unity-Runtime-Animation-RecorderRecord animations in Unity runtime. Can save to .anim, maya, or FBX ASCII format.项目地址: https://gitcode.com/gh_mirrors/un/Unity-Runtime-Animation-Recorder
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考