This Swift library allows you to upload characters and their animations from the Spine app (v3.8.x +) to SpriteKit for platforms:
iOS
macOS
tvOS
watchOS
Implemented almost all the functionality of the essential version of Spine app: Animation of bones, skins, animation of slots, creation of physical bodies on the basis of bounding boxes and some other. See Implemented Features for more information.
Example of working with the library: Sample project
Learn more about working with the library: Spine Wiki
Add the pod to your podfile
pod 'Spine'
run
pod install
- In
assets
catalog createfolder
. (Goblins
folder in example below) - Create
sprite atlases
. (default
,goblin
andgoblingirl
sprite atlases in example below) - Put images into sprite atlaces.
Note that the images that are in the
root
folder of the Spine app project must be in the sprite atlas nameddefault
in the Xcode project.
Final result should looks something like this:
Set Provides Namespace
option enabled for the root folder and for all sprite atlases in the Xcode's attribute inspector:
If you forget to set the namespace, later when you initialize your character images can be just not found.
Put the JSON exported from the Spine application somewhere in your project:
For more information about assets see Assets Wiki
Somewhere at the beginning of your code, import the Spine
library:
import Spine
The easiest way to load a character from a JSON file and apply skin to it is to use the appropriate Skeleton
class constructor:
if let character = Skeleton(fromJSON: "goblins-ess", atlas: "Goblins", skin: "goblin") {
//Do something with your character here
}
Skeleton is a subclass of
SKNode
, so you can do with it whatever you can do withSKNode
itself
This way you can apply the animation created in Spine to the character:
if let walkAnimation = character.animation(named: "walk") {
character.run(walkAnimation)
}
The
animation(named:)
method returns an object of theSKAction
class so that you can use this animation as any other object of theSKAction
class
This is an example of the simplest scene in which we load our Goblin character, add it to the scene and start walk animation in an endless loop:
import SpriteKit
import Spine
class GameScene: SKScene {
override func didMove(to view: SKView) {
if let character = Skeleton(fromJSON: "goblins-ess", atlas: "Goblins", skin: "goblin"){
character.name = "goblin"
character.position = CGPoint(x: self.size.width / 2, y: (self.size.height / 2))
self.addChild(character)
if let walkAnimation = character.animation(named: "walk") {
character.run(SKAction.repeatForever(walkAnimation))
}
}
}
}
Name | Model | Feature | Animation |
---|---|---|---|
Bones | |||
- Rotation | + | + | + |
- Translation | + | + | + |
- Scale | + | + | + |
- Shear | + | - | - |
Bones extras: | |||
- Reflect | + | - | |
- Rotation Inheritance | + | - | |
- Scale Inheritance | + | - | |
- Reflect Inheritance | + | - | |
Slots | |||
- Attachment | + | + | + |
- Tint Color | + | + | +/- |
- Dark Tint Color | + | - | |
Skins | + | + | |
Attachments | |||
- Region | + | + | |
- Mesh | + | - | - |
- Linked Mesh | + | - | - |
- Bounding Box | + | + | - |
- Path | + | - | - |
- Point | + | + | |
- Clipping | + | - | - |
Constraints | |||
- IK Constraint | + | - | - |
- Transform Constraint | + | - | - |
- Path Constraint | + | - | - |
Events | + | + | + |
Draw Order | + | + | + |
Swift 5.0
- iOS 8.0+
- macOS 10.10+
- tvOS 9.0+
- watchOS 3.0+
This project is licensed under the MIT License - see the LICENSE file for details
- Spine user guide: http://esotericsoftware.com/spine-user-guide
- Spine JSON format documentation: http://esotericsoftware.com/spine-json-format
- Spine oficial runtimes: https://github.com/EsotericSoftware/spine-runtimes