Spine 动画倍速不符合预期?先核对两层 timeScale
同一动作在运行时忽快忽慢时,记录更新delta、AnimationState和TrackEntry的倍率,再区分片段速度与混合时间。


预览动作正常,接入游戏后却没有按设置的两倍速播放。先不要重新生成角色或重做动作:同一段时间可能已经被宿主组件和Spine运行时分别缩放。本文针对外部运行库的排查,不表示工作台新增了时间线或倍速控制功能。
先分清改变的是整个状态还是当前片段
AnimationState.timeScale官方说明将它定义为状态更新delta的倍率,影响该状态中的动画与混合。TrackEntry.timeScale则影响一个轨道条目的动画时间。它们不是两个互相替代的开关。
以当前安装的运行库与引擎组件为准:组件可能还包了一层速度设置。检查它最终改了哪个对象,以及传给状态更新的delta是否已经缩放,不直接把不同引擎的属性名当同一个契约。
用一段可复算的记录识别重复缩放
在没有排队切换、没有额外时间处理的普通正向播放片段里,可按“传入delta × 状态倍率 × 当前条目倍率”理解条目时间推进。以下只是条件明确的算术示例,不是运行计时实验:
- 传入1秒,状态1、条目2:条目约推进2秒。
- 传入1秒,状态0.5、条目2:两层倍率抵消,约推进1秒。
- 宿主先把1秒乘2,又设置状态倍率2、条目1:约推进4秒,而不是2秒。
这里的1秒指已按该运行库要求换算的更新量,不是直接把毫秒计数塞进接口。先记录原始帧间隔、换算后的delta及每帧调用次数,避免把“更新了两次”误认为图片或动作文件有问题。
不要把这个乘法套到所有混合时间
当前官方文档明确说明,条目倍率不影响mixTime,非默认倍率还可能需要复核mixDuration和排队delay。只调快片段,就期待交叉淡化和队列间隔同比缩短,可能得到另一种节奏。
先在单片段受控条件下排查,再恢复切换和队列。循环与只播放一次属于另一项状态,参照预览循环与运行时播放检查,不要用重复设置动画来掩盖速度问题。
交付前保留哪些证据
- 保存导出版本、运行库版本、当前动画和实际TrackEntry。
- 记录宿主更新次数、delta单位及两层倍率,固定同一段观察区间。
- 分别验收普通播放、动作切换和排队,确认需要的业务事件时机。
- 恢复宿主自己的暂停与时间控制,确认没有两处同时改速。
可以先在Spine工作台确认素材与基准动作,再由接收项目负责人验证运行时更新链。本文没有对用户工程进行性能或计时测试,静态配图不作为倍速证据。
