Spine_Animator: a component on an entity that renders/updates a Spine rig in the world
Spine_Instance: the underlying instance you control in code (play animations, switch skins, etc)
Skins: “outfits/variants” that decide which images are visible
Animations: named timelines (e.g. "idle", "walk", "open")
When to use Spine_Animator vs Spine_Instance
Use Spine_Animator for anything that exists in the world (props, NPCs, interactables).
Use Spine_Instance directly when you want to draw a Spine in UI or you need manual lifetime control.
If you call Spine_Instance.create(), you must call instance->destroy() when you're done (otherwise you leak).
Spine API reference (CSL)
Spine_Animator::class:Component{depth_offset:float;layer:s32;instance:Spine_Instance #read_only;}Spine_Instance::class{create::proc()->Spine_Instance;destroy::method();update::method(dt:float);set_skeleton::method(asset:Spine_Asset);get_skeleton::method()->Spine_Asset;set_animation::method(animation:string,loop:bool,track:s64,speed:float=1);// Skinsset_skin::method(skin:string);enable_skin::method(skin:string);disable_skin::method(skin:string);disable_all_skins::method();refresh_skins::method();get_skins::method()->[]string;// Bone local offsets (advanced)get_bone_local_position::method(bone_name:string)->v2;set_bone_local_position::method(bone_name:string,position:v2);// Optional: drive animations via a state machineset_state_machine::method(new_state_machine:State_Machine,transfer_ownership:bool);// Visualscolor_multiplier:v4;set_color_replace_color::method(color:Color_Replace_Color);}
Adding animated objects to your world
There are 3 ways to add animated objects to your scene, all of which will create a Spine_Animator component.
Drag any animated asset from the Asset Cataloginto your scene
Create a new entity and add the Spine_Animator component
Set the Skeleton Data Asset field to a .spine file in your assets
Add a spine animator to your world using scripting (covered in the examples)
If your code and the Spine_Animator are on the same entity and start at the same time, call spine->awaken() before accessing spine.instance.
Examples
Openable Chest
An interactable chest that plays an “open” animation and then stays open:
Walking Chicken
A simple “idle vs walk” loop based on movement:
Driveable Car
If you want "driveable" behavior, the simplest approach is to drive the movement with your own gameplay logic, and drive the animation based on whether the car is moving.
If you're switching between only two looping animations, direct set_animation calls are usually simpler than building a state machine.
Skins (variants/outfits)
Some spines don't start with a default skin. If your entity is "invisible", you likely need to pick a skin.
Always call refresh_skins() after changing skins.
State machines (optional, for complex animation logic)
You can keep animation logic simple by calling set_animation directly. If you have many states (idle/run/attack/hit/death), a State_Machine helps you define transitions once and then just set variables/triggers.
The key idea: state names must match animation names in your Spine file.
What a state machine does
Think of a state machine as a tiny “animation controller”:
You define states (each state name should match a Spine animation name)
You define variables (bool, trigger, int, float)
You define transitions between states based on those variables
At runtime, you only update variables (the state machine chooses the animation)
Minimal example: idle/walk + attack trigger
If you pass transfer_ownership = true to set_state_machine, the Spine_Instance will destroy the state machine for you. Otherwise, you must destroy it yourself.
Troubleshooting
Q: I dragged a spine asset into my scene and I don't see any object, it's just an empty entity
A: Make sure to click "Add Skin" and select a variant of the spine to apply! Some spines don't start with a default skin.
Q: My script crashes when I access spine.instance
A: If your script and the Spine_Animator start at the same time, call spine->awaken() before using spine.instance.
Q: I changed skins but nothing happened
A: After any skin change (set_skin, enable_skin, disable_skin, disable_all_skins), you must call refresh_skins().
Custom Player Skins/Animations
If you want to add custom animations to your player, you can do so by merging the base All Out player spine rig together with a custom rig containing more animations (we can provide many of these, just contact usDeveloper Support)
The Spine Rig Format
Spines rigs are made up of 3 files (automatically downloaded for you when you use the Asset Catalog)
The skeleton file (.spine) provides information about the bones, skins, and structure of your animated object.
The atlas image (.png) has the actual textures used to draw the spine in the world.
The atlas file (.atlas) provides information about where inside the .png atlas image each part of the animated object is.
Creating your own animations
Currently to make your own animations or rigs, you'll need to own a copy of Esoteric Spine. However, we provide a massive library of existing spine rigs and animations as part of the Asset Catalogfor you to use and we recommend starting there!
Export Format
To use a custom Spine rig in All Out, you need to export the standard 3-file Spine bundle into your res folder:
something.spine
something.atlas
something.png (atlas texture)
If you're unsure about export settings, start from an existing All Out Spine asset from the Asset Catalog and mirror its structure or reach out to us!