You can find the officially compiled Upgrade Guide for version 4.3 below.
[Updated 2026-05-08]
Note: Chinese and Japanese translations of this upgrade guide are available as well.
Re-exporting skeletons and upgrading the spine-unity runtime files
Please check out the spine-unity documentation sections below:
spine-unity Runtime Documentation: Updating the spine-unity Runtime
spine-unity Runtime Documentation: Updating an Extension UPM Package
They describe necessary steps like re-exporting your skeletons, upgrading across multiple spine-unity versions and how to safely upgrade the spine-unity runtime files.
⚠️ Overview of Major Changes in 4.3
spine-unity 4.3 introduces two major sets of breaking changes that you need to address in order:
1. spine-csharp API changes: The underlying C# runtime introduces a new pose system that affects how you access bone, slot, and constraint properties. You'll need to update your existing code to use the new API before dealing with component changes.
2. spine-unity component split (handle after API changes above): Main skeleton components have been split into separate rendering and animation components. While components are automatically upgraded when scenes/prefabs are opened, your component references in scripts may be lost and require migration.
Important: Start by updating your code for the spine-csharp API changes below, then handle the component split migration. This order ensures your code compiles correctly before dealing with component reference issues.
┌─────────────────────────────────────────────────────┐
│ 1. Adapting your code to spine-csharp 4.3 API changes
└─────────────────────────────────────────────────────┘
For the complete list of API changes with better formatting, please see the Changelog, sections C# and Unity.
The main C# API changes that affect Unity include the new pose system with these breaking changes. For each compile error you receive, you should be able to search the listing below to find how to replace the old code with the new moved properties:
1. Color properties .R .G .B .A are replaced by .GetColor() and .SetColor():
2. Bone local transform properties moved to Bone.Pose:
-
Bone.X → Bone.Pose.X
-
Bone.Y → Bone.Pose.Y
-
Bone.Rotation → Bone.Pose.Rotation
-
Bone.ScaleX → Bone.Pose.ScaleX
-
Bone.ScaleY → Bone.Pose.ScaleY
-
Bone.ShearX → Bone.Pose.ShearX
-
Bone.ShearY → Bone.Pose.ShearY
3. Bone world and applied transform properties moved to Bone.AppliedPose:
-
Bone.AX → Bone.AppliedPose.X
-
Bone.AY → Bone.AppliedPose.Y
-
Bone.ARotation → Bone.AppliedPose.Rotation
-
Bone.AScaleX → Bone.AppliedPose.ScaleX
-
Bone.AScaleY → Bone.AppliedPose.ScaleY
-
Bone.AShearX → Bone.AppliedPose.ShearX
-
Bone.AShearY → Bone.AppliedPose.ShearY
-
Bone.WorldX → Bone.AppliedPose.WorldX
-
Bone.WorldY → Bone.AppliedPose.WorldY
-
Bone.WorldRotationX → Bone.AppliedPose.WorldRotationX
-
Bone.WorldRotationY → Bone.AppliedPose.WorldRotationY
4. Slot properties moved to SlotPose, i.e. Slot.AppliedPose:
-
Slot.Attachment → Slot.AppliedPose.Attachment
-
Slot.R, .G, .B, .A → Slot.AppliedPose.GetColor() and SetColor()
-
Slot.R2, .G2, .B2 → Slot.AppliedPose.GetDarkColor() and SetDarkColor()
-
Slot.HasSecondColor → Slot.AppliedPose.HasSecondColor
-
Slot.Deform → Slot.AppliedPose.Deform
-
Slot.SequenceIndex → Slot.AppliedPose.SequenceIndex
5. Constraint properties moved to Constraint.Pose:
IkConstraint:
-
IkConstraint.Mix → IkConstraint.Pose.Mix
-
IkConstraint.Softness → IkConstraint.Pose.Softness
-
IkConstraint.BendDirection → IkConstraint.Pose.BendDirection
-
IkConstraint.Compress → IkConstraint.Pose.Compress
-
IkConstraint.Stretch → IkConstraint.Pose.Stretch
TransformConstraint:
-
TransformConstraint.MixRotate → TransformConstraint.Pose.MixRotate
-
TransformConstraint.MixX → TransformConstraint.Pose.MixX
-
TransformConstraint.MixY → TransformConstraint.Pose.MixY
-
TransformConstraint.MixScaleX → TransformConstraint.Pose.MixScaleX
-
TransformConstraint.MixScaleY → TransformConstraint.Pose.MixScaleY
-
TransformConstraint.MixShearY → TransformConstraint.Pose.MixShearY
PathConstraint:
-
PathConstraint.Position → PathConstraint.Pose.Position
-
PathConstraint.Spacing → PathConstraint.Pose.Spacing
-
PathConstraint.MixRotate → PathConstraint.Pose.MixRotate
-
PathConstraint.MixX → PathConstraint.Pose.MixX
-
PathConstraint.MixY → PathConstraint.Pose.MixY
PhysicsConstraint:
-
PhysicsConstraint.Mix → PhysicsConstraint.Pose.Mix
-
PhysicsConstraint.Gravity → PhysicsConstraint.Pose.Gravity
-
PhysicsConstraint.Strength → PhysicsConstraint.Pose.Strength
-
PhysicsConstraint.Damping → PhysicsConstraint.Pose.Damping
-
PhysicsConstraint.MassInverse → PhysicsConstraint.Pose.MassInverse
-
PhysicsConstraint.Wind → PhysicsConstraint.Pose.Wind
6. ConstraintData properties moved to ConstraintData.GetSetupPose():
-
IkConstraintData.Mix → IkConstraintData.GetSetupPose().Mix
-
Similar changes for all other constraint data properties and types (TransformConstraintData, PathConstraintData, PhysicsConstraintData)
-
ConstraintData.XX → ConstraintData.GetSetupPose().XX
7. SkeletonData now provides a single IConstraintData list SkeletonData.Constraints instead of separate lists per constraint type:
-
SkeletonData.IkConstraints → SkeletonData.Constraints.OfType<IkConstraintData>()
-
SkeletonData.TransformConstraints → SkeletonData.Constraints.OfType<TransformConstraintData>()
-
SkeletonData.PathConstraints → SkeletonData.Constraints.OfType<PathConstraintData>()
-
SkeletonData.PhysicsConstraints → SkeletonData.Constraints.OfType<PhysicsConstraintData>()
8. SkeletonData now provides SkeletonData.FindConstraint<ConstraintData>() instead of single find methods per constraint type:
-
SkeletonData.FindIkConstraint(name) → SkeletonData.FindConstraint<IkConstraintData>(name)
-
SkeletonData.FindTransformConstraint(name) → SkeletonData.FindConstraint<TransformConstraintData>(name)
-
SkeletonData.FindPathConstraint(name) → SkeletonData.FindConstraint<PathConstraintData>(name)
-
SkeletonData.FindPhysicsConstraint(name) → SkeletonData.FindConstraint<PhysicsConstraintData>(name)
9. Renamed setup pose methods:
-
Skeleton.SetToSetupPose() → Skeleton.SetupPose()
-
Skeleton.SetBonesToSetupPose() → Skeleton.SetupPoseBones()
-
Skeleton.SetSlotsToSetupPose() → Skeleton.SetupPoseSlots()
-
Bone.SetToSetupPose() → Bone.SetupPose()
-
Slot.SetToSetupPose() → Slot.SetupPose()
-
IkConstraint.SetToSetupPose() → IkConstraint.SetupPose()
10. Skeleton.Physics was moved to Physics directly in Spine namespace:
-
May clash with UnityEngine.Physics in Unity
-
Spine Physics: UpdateWorldTransform(Skeleton.Physics.Update) → UpdateWorldTransform(Spine.Physics.Update)
-
UnityEngine Physics: Physics.gravity → UnityEngine.Physics.gravity
11. EventData value properties moved to EventData.SetupPose:
-
EventData.Int → EventData.SetupPose.Int
-
EventData.Float → EventData.SetupPose.Float
-
EventData.String → EventData.SetupPose.String
-
EventData.Volume → EventData.SetupPose.Volume
-
EventData.Balance → EventData.SetupPose.Balance
12. Skeleton.DrawOrder type changed from ExposedList<Slot> to DrawOrder class:
13. TrackEntry removed properties:
14. Renamed Skin.SkinEntry.Name to Skin.SkinEntry.Placeholder:
15. AttachmentLoader API changes, affecting custom AttachmentLoader subclasses:
-
AttachmentLoader methods NewRegionAttachment, NewMeshAttachment, NewBoundingBoxAttachment, NewClippingAttachment, NewPathAttachment, and NewPointAttachment now take an additional string placeholder parameter. Update any custom AttachmentLoader implementations accordingly
-
Removed AtlasAttachmentLoader.FindRegion(string name) from public interface. Added protected AtlasRegion FindRegion(string name, string path) instead which may be overridden when deriving your own subclass
16. Other breaking changes:
-
Bone no longer provides a Bone.Skeleton property, constructor no longer takes a skeleton parameter
-
Timeline Apply() methods now take an additional appliedPose parameter
-
Timeline PropertyIds type changed from string[] to ulong[]. Animation.HasTimeline() parameter and Timeline constructors changed accordingly
-
Attachment ComputeWorldVertices() methods now take an additional skeleton parameter
-
Renamed timeline constraint index methods to use unified ConstraintIndex property
-
Removed BoneLocal class. BonePose now directly implements IPose<BonePose> and contains all local pose fields. Replace any use of BoneLocal → BonePose
-
IkConstraintData.Uniform replaced by IkConstraintData.ScaleY. IkConstraint.Apply() methods now take ScaleY instead of a bool uniform parameter
-
MeshAttachment.ParentMesh renamed to MeshAttachment.SourceMesh
17. Unity-specific breaking changes:
-
Example skeletons in Spine Examples are now using straight alpha textures and materials for better compatibility with Linear colorspace
-
Changed default atlas texture workflow from PMA to straight alpha textures for better compatibility with both Gamma and Linear color space
-
attachment.GetRemappedClone(params) → attachment.Copy(); attachment.SetRegion(params); Removed AttachmentCloneExtensions class, SetRegion methods are now in AttachmentRegionExtensions
-
ToAtlasRegionPMAClone() → ToAtlasRegionWithNewPMATexture()
-
ToRegionAttachmentPMAClone() → ToRegionAttachmentWithNewPMATexture()
-
SkeletonRenderer.maskInteraction → SkeletonRenderer.MaskInteraction
-
Removed Spine Timeline Spine Animation State Clip property Hold Previous. New AnimationState hold system automatically calculates the required state values
-
Removed intermediately added (4.3-beta branch only) SkeletonAnimation callbacks MainThreadStart, MainThreadInterrupt, MainThreadEnd, MainThreadDispose, MainThreadComplete and MainThreadEvent. Instead SkeletonAnimation.AnimationState and TrackEntry events are now automatically processed on the main thread, so no user code change is required, and TrackEntry events can be utilized directly even with threaded animation enabled
-
SkeletonGraphic property CustomSlotMaterials now properly assigns the override material directly instead of assigning the texture of the override material (which was of little use). You can now assign a SkeletonGraphic-compatible material like SkeletonGraphicAdditive-Straight
-
Removed the rather useless old menu entries GameObject - Spine - SkeletonRenderer and the like, which spawned a GameObject with an empty SkeletonRenderer component without SkeletonDataAsset assigned and thus uninitialized
-
Removed support for the long-abandoned third-party asset "2D Toolkit" (TK2D) by Unikron Software
┌───────────────────────────────────────────────┐
│ 2. Adapting to spine-unity Component Architecture Split
└───────────────────────────────────────────────┘
After updating your code for the spine-csharp API changes above, you need to handle the component split changes:
Main skeleton components have been split into separate rendering and animation components. This change enables new flexible combinations (like using SkeletonMecanim for animation with SkeletonGraphic for rendering) but requires migration of existing projects.
Components will be automatically upgraded when scenes/prefabs are opened in the Unity Editor:
-
SkeletonAnimation → SkeletonAnimation + SkeletonRenderer components
-
SkeletonMecanim → SkeletonMecanim + SkeletonRenderer components
-
SkeletonGraphic → SkeletonAnimation + SkeletonGraphic components
However, existing references in your custom scripts may be lost because the component types no longer match (e.g., SkeletonAnimation is no longer a subclass of SkeletonRenderer).
📖 Please read the detailed migration guide:
4.3 Split Component Upgrade Guide. Available in Chinese and Japanese as well.
This guide contains:
- Step-by-step migration instructions
- Code examples for updating your scripts
- Solutions for preventing lost component references
- Optional two-step migration path from 4.2
Changes of default values
-
Default texture workflow changed: From PMA to straight alpha textures for better compatibility with Linear color space (Unity's default). PMA Vertex Color is independent of this and should still be enabled for single-pass additive rendering.
-
Added Spine Preferences Switch Texture Workflow functionality to quickly switch to the respective PMA or straight-alpha texture and material presets.
Restructuring (Non-Breaking)
-
Spine Examples have been moved and are now part of the main spine-unity UPM package. To import, select the spine-unity Runtime package in the Package Manager window, and in the Samples tab and hit Import.
Officially supported Unity versions: 2017.1-6000.1
You can download the new unitypackages from the download page: spine-unity Download
If you find anything that should be noted or added to the guide, please do not hesitate to post it below so that we can make upgrading as easy and painless as possible for everyone.
We're aware that this update requires significant migration effort, but we hope that the gained flexibility of combining animation and rendering components independently and the new threading features make up for this. Check out the CHANGELOG for details.
We hope that you like the new Spine 4.3-beta with its improved architecture and performance features! 🙂