Based on my knowledge, there isn't a built-in mechanism specifically designed to limit animation FPS in a multithreaded environment in Spine 4.3.
The core update loop for Spine animations involves:
- Advancing the
AnimationState via animationState.update(deltaTime)
- Applying it to the skeleton via
animationState.apply(skeleton)
- Calculating world transforms via
skeleton.updateWorldTransform()
For a fixed timestep approach in a multithreaded setup, you would need to implement the FPS limiting logic yourself at the thread level. The general idea would be to accumulate delta time in your worker thread and only call the spine update functions when enough time has accumulated to match your target frame interval. Something like:
float accumulated = 0f;
float targetInterval = 1f / targetFPS;
// In your thread's update loop:
accumulated += deltaTime;
if (accumulated >= targetInterval) {
animationState.Update(targetInterval);
animationState.Apply(skeleton);
skeleton.UpdateWorldTransform();
accumulated -= targetInterval;
}
This keeps the fixed timestep logic entirely within the thread responsible for updating the skeleton, without depending on the main thread.
That said, multithreading support for the main skeleton components (SkeletonAnimation, SkeletonMecanim, and SkeletonGraphic) has been a roadmap item — you can follow the progress on the GitHub issue tracker and the Spine roadmap. As parallelization support matures, more structured solutions for this kind of scenario may become available.