Composer不支持关键帧删除的撤销操作,因其动画模型为状态驱动而非关键帧序列,删帧即删除状态记录入口,且无Undo栈;仅非关键帧类编辑(如拖动零件、改材质等)可Ctrl+Z撤回。

Composer 关键帧删除后无法撤销
Composer 没有 Undo 栈支持关键帧级别的操作回退。按 Delete 键或右键 →「清除」后,该关键帧数据立即从当前动画状态中移除,且不写入任何本地历史缓存。这不是 UI 延迟响应,而是底层设计决定:关键帧只是状态变更的快照标记,不是独立可回滚的对象。
哪些操作能被「Ctrl+Z」撤回?
仅限非关键帧类编辑行为,例如:
- 在装配树中拖动零件重排层级顺序
- 修改材质颜色(通过属性面板输入 RGB 值)
- 调整照相机 FOV 数值(直接键入新值并回车)
- 启用/禁用 Digger 开关按钮(非关键帧记录动作)
一旦你执行了「设置位置关键帧」→「拖动模型」→「再设一帧」→「删掉第二帧」这个完整链路,Ctrl+Z 只能撤回到「设第二帧」之前的状态,删帧动作本身不可逆。
误删关键帧后怎么补救?
没有自动恢复机制,只能靠人工重建,但有三条实操路径可降低损失:
- 检查时间轴上是否还残留同属性的其他关键帧——比如删了
RotationZ在 2.0s 的帧,但 0.0s 和 4.0s 还有,可复制 0.0s 帧粘贴到 2.0s,再手动调数值 - 若刚删完就发现错了,立刻关闭当前 .smg 文件(不保存),重新打开——这是唯一能“回到删之前”的方式
- 长期建议开启「自动备份」:在
Tools → Options → General中勾选Enable auto-save,间隔设为 2 分钟;虽然不备份关键帧快照,但至少能防止整段动画因崩溃丢失
为什么 Composer 不做关键帧级 Undo?
根本原因在于它的动画模型不是基于关键帧序列,而是状态驱动:withAnimation + 属性绑定 + 插值器实时计算。关键帧只是触发点,不是存储单元。你删的不是“一帧数据”,而是“一次状态记录入口”。这也解释了为什么它不提供 copyKeyframe API、也不允许导出关键帧 CSV——那些东西在架构里根本不存在。
最容易被忽略的是:你以为在编辑时间轴,其实是在编辑状态变迁图;所有“删帧”操作,本质是删掉一个状态跃迁的锚点。锚点没了,插值路径就断了,而 Composer 不会替你重连。


















