diff --git a/spine-tk2d/Assets/Spine/BoneComponent.cs b/spine-tk2d/Assets/Spine/BoneComponent.cs
index 946ef09d9..ea88c227e 100644
--- a/spine-tk2d/Assets/Spine/BoneComponent.cs
+++ b/spine-tk2d/Assets/Spine/BoneComponent.cs
@@ -38,44 +38,52 @@ using Spine;
[ExecuteInEditMode]
[AddComponentMenu("Spine/BoneComponent")]
public class BoneComponent : MonoBehaviour {
- public SkeletonComponent skeletonComponent;
+ public bool valid;
+ public SkeletonRenderer skeletonRenderer;
public Bone bone;
/// If a bone isn't set, boneName is used to find the bone.
public String boneName;
protected Transform cachedTransform;
- protected Transform skeletonComponentTransform;
+ protected Transform skeletonTransform;
- void Awake () {
+ public void Reset () {
+ bone = null;
cachedTransform = transform;
+ valid = skeletonRenderer != null && skeletonRenderer.valid;
+ if (!valid) return;
+ skeletonTransform = skeletonRenderer.transform;
+ }
- if(skeletonComponent == null) return;
- skeletonComponentTransform = skeletonComponent.transform;
+ public void Awake () {
+ Reset();
}
public void LateUpdate () {
- if (skeletonComponent == null || skeletonComponent.skeleton == null) return;
+ if (!valid) {
+ Reset();
+ return;
+ }
+
if (bone == null) {
- if (boneName == null) return;
- bone = skeletonComponent.skeleton.FindBone(boneName);
+ if (boneName == null || boneName.Length == 0) return;
+ bone = skeletonRenderer.skeleton.FindBone(boneName);
if (bone == null) {
- Debug.Log("Bone not found: " + boneName, this);
+ Debug.LogError("Bone not found: " + boneName, this);
return;
}
}
- if (cachedTransform.parent == skeletonComponentTransform) {
+ if (cachedTransform.parent == skeletonTransform) {
cachedTransform.localPosition = new Vector3(bone.worldX, bone.worldY, cachedTransform.localPosition.z);
Vector3 rotation = cachedTransform.localRotation.eulerAngles;
cachedTransform.localRotation = Quaternion.Euler(rotation.x, rotation.y, bone.worldRotation);
} else {
- cachedTransform.position = skeletonComponentTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, cachedTransform.position.z));
- Vector3 rotation = skeletonComponentTransform.rotation.eulerAngles;
+ cachedTransform.position = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, cachedTransform.position.z));
+ Vector3 rotation = skeletonTransform.rotation.eulerAngles;
cachedTransform.rotation = Quaternion.Euler(rotation.x, rotation.y,
- skeletonComponentTransform.rotation.eulerAngles.z + bone.worldRotation);
+ skeletonTransform.rotation.eulerAngles.z + bone.worldRotation);
}
-
}
-
-}
+}
\ No newline at end of file
diff --git a/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs b/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs
index 4767372eb..494b3db2d 100644
--- a/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs
+++ b/spine-tk2d/Assets/Spine/Editor/BoneComponentInspector.cs
@@ -34,10 +34,10 @@ using UnityEngine;
[CustomEditor(typeof(BoneComponent))]
public class BoneComponentInspector : Editor {
- private SerializedProperty boneName, skeletonComponent;
+ private SerializedProperty boneName, skeletonRenderer;
void OnEnable () {
- skeletonComponent = serializedObject.FindProperty("skeletonComponent");
+ skeletonRenderer = serializedObject.FindProperty("skeletonRenderer");
boneName = serializedObject.FindProperty("boneName");
}
@@ -45,13 +45,13 @@ public class BoneComponentInspector : Editor {
serializedObject.Update();
BoneComponent component = (BoneComponent)target;
- EditorGUILayout.PropertyField(skeletonComponent);
+ EditorGUILayout.PropertyField(skeletonRenderer);
- if (component.skeletonComponent != null) {
- String[] bones = new String[component.skeletonComponent.skeleton.Data.Bones.Count + 1];
+ if (component.valid) {
+ String[] bones = new String[component.skeletonRenderer.skeleton.Data.Bones.Count + 1];
bones[0] = "";
for (int i = 0; i < bones.Length - 1; i++)
- bones[i + 1] = component.skeletonComponent.skeleton.Data.Bones[i].Name;
+ bones[i + 1] = component.skeletonRenderer.skeleton.Data.Bones[i].Name;
Array.Sort(bones);
int boneIndex = Math.Max(0, Array.IndexOf(bones, boneName.stringValue));
@@ -61,14 +61,13 @@ public class BoneComponentInspector : Editor {
boneIndex = EditorGUILayout.Popup(boneIndex, bones);
EditorGUILayout.EndHorizontal();
- boneName.stringValue = bones[boneIndex];;
+ boneName.stringValue = boneIndex == 0 ? null : bones[boneIndex];
}
if (serializedObject.ApplyModifiedProperties() ||
(Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed")
) {
- component.bone = null;
- component.LateUpdate();
+ component.Reset();
}
}
}
diff --git a/spine-tk2d/Assets/Spine/Editor/Menus.cs b/spine-tk2d/Assets/Spine/Editor/Menus.cs
index 1ad559627..a01ad8312 100644
--- a/spine-tk2d/Assets/Spine/Editor/Menus.cs
+++ b/spine-tk2d/Assets/Spine/Editor/Menus.cs
@@ -54,9 +54,9 @@ public class Menus {
Selection.activeObject = asset;
}
- [MenuItem("GameObject/Create Other/Spine SkeletonComponent")]
- static public void CreateSkeletonComponentGameObject () {
- GameObject gameObject = new GameObject("New SkeletonComponent", typeof(SkeletonComponent));
+ [MenuItem("GameObject/Create Other/Spine SkeletonRenderer")]
+ static public void CreateSkeletonRendererGameObject () {
+ GameObject gameObject = new GameObject("New SkeletonRenderer", typeof(SkeletonRenderer));
EditorUtility.FocusProjectWindow();
Selection.activeObject = gameObject;
}
diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs
index c0b248af5..9f646f281 100644
--- a/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs
+++ b/spine-tk2d/Assets/Spine/Editor/SkeletonAnimationInspector.cs
@@ -89,10 +89,8 @@ public class SkeletonAnimationInspector : Editor {
animationIndex = EditorGUILayout.Popup(animationIndex, animations);
EditorGUILayout.EndHorizontal();
- if (animationIndex == 0)
- component.animationName = null;
- else
- component.animationName = animations[animationIndex];
+ component.animationName = animationIndex == 0 ? null : animations[animationIndex];
+ animationName.stringValue = component.animationName;
}
// Animation loop.
@@ -109,8 +107,7 @@ public class SkeletonAnimationInspector : Editor {
(Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed")
) {
if (!Application.isPlaying) {
- component.Clear();
- component.Update();
+ component.Reset();
}
}
}
diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs
similarity index 94%
rename from spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs
rename to spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs
index e384db750..bb3916c61 100644
--- a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs
+++ b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs
@@ -32,8 +32,8 @@ using System;
using UnityEditor;
using UnityEngine;
-[CustomEditor(typeof(SkeletonComponent))]
-public class SkeletonComponentInspector : Editor {
+[CustomEditor(typeof(SkeletonRenderer))]
+public class SkeletonRendererInspector : Editor {
private SerializedProperty skeletonDataAsset, initialSkinName, timeScale, normals, tangents;
void OnEnable () {
@@ -46,7 +46,7 @@ public class SkeletonComponentInspector : Editor {
override public void OnInspectorGUI () {
serializedObject.Update();
- SkeletonComponent component = (SkeletonComponent)target;
+ SkeletonRenderer component = (SkeletonRenderer)target;
EditorGUILayout.PropertyField(skeletonDataAsset);
@@ -78,8 +78,7 @@ public class SkeletonComponentInspector : Editor {
(Event.current.type == EventType.ValidateCommand && Event.current.commandName == "UndoRedoPerformed")
) {
if (!Application.isPlaying) {
- component.Clear();
- component.Update();
+ component.Reset();
}
}
}
diff --git a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta
similarity index 78%
rename from spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta
rename to spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta
index 59915bafb..9d775f336 100644
--- a/spine-tk2d/Assets/Spine/Editor/SkeletonComponentInspector.cs.meta
+++ b/spine-tk2d/Assets/Spine/Editor/SkeletonRendererInspector.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: dbb89dadcac8d6b48869aeb81b0ae88f
+guid: 350bd1e336864e045a8d44c7afe923e8
MonoImporter:
serializedVersion: 2
defaultReferences: []
diff --git a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs
index d6289b3d2..63a4be1a5 100644
--- a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs
+++ b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs
@@ -34,10 +34,10 @@ using System.Collections.Generic;
using UnityEngine;
using Spine;
-/** Extends SkeletonComponent to apply an animation. */
-[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
+[ExecuteInEditMode]
[AddComponentMenu("Spine/SkeletonAnimation")]
-public class SkeletonAnimation : SkeletonComponent {
+public class SkeletonAnimation : SkeletonRenderer {
+ public float timeScale = 1;
public bool loop;
public Spine.AnimationState state;
@@ -59,24 +59,30 @@ public class SkeletonAnimation : SkeletonComponent {
state.SetAnimation(0, value, loop);
}
}
-
- override public void Initialize () {
- if (Initialized) return;
- base.Initialize();
-
+ public override void Reset () {
+ base.Reset();
+ if (!valid) return;
+
state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData());
- if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop);
+ if (_animationName != null && _animationName.Length > 0) {
+ state.SetAnimation(0, _animationName, loop);
+ Update(0);
+ }
}
- override public void UpdateSkeleton (float deltaTime) {
- // Apply the animation.
+ public virtual void Update () {
+ Update(Time.deltaTime);
+ }
+
+ public virtual void Update (float deltaTime) {
+ if (!valid) return;
+
+ deltaTime *= timeScale;
+ skeleton.Update(deltaTime);
state.Update(deltaTime * timeScale);
state.Apply(skeleton);
-
if (UpdateBones != null) UpdateBones(this);
-
- // Call overridden method to call skeleton Update and UpdateWorldTransform.
- base.UpdateSkeleton(deltaTime);
+ skeleton.UpdateWorldTransform();
}
}
diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs b/spine-tk2d/Assets/Spine/SkeletonComponent.cs
deleted file mode 100644
index 16f23d6dd..000000000
--- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs
+++ /dev/null
@@ -1,334 +0,0 @@
-/******************************************************************************
- * Spine Runtimes Software License
- * Version 2.1
- *
- * Copyright (c) 2013, Esoteric Software
- * All rights reserved.
- *
- * You are granted a perpetual, non-exclusive, non-sublicensable and
- * non-transferable license to install, execute and perform the Spine Runtimes
- * Software (the "Software") solely for internal use. Without the written
- * permission of Esoteric Software (typically granted by licensing Spine), you
- * may not (a) modify, translate, adapt or otherwise create derivative works,
- * improvements of the Software or develop new applications using the Software
- * or (b) remove, delete, alter or obscure any trademarks or any copyright,
- * trademark, patent or other intellectual property or proprietary rights
- * notices on or in the Software, including any copy thereof. Redistributions
- * in binary or source form must include this license and terms.
- *
- * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using UnityEngine;
-using Spine;
-
-/** Renders a skeleton. Extend to apply animations, get bones and manipulate them, etc. */
-[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
-[AddComponentMenu("Spine/SkeletonComponent")]
-public class SkeletonComponent : MonoBehaviour {
- public SkeletonDataAsset skeletonDataAsset;
- public Skeleton skeleton;
- public String initialSkinName;
- public float timeScale = 1;
- public bool calculateNormals;
- public bool calculateTangents;
- public float zSpacing;
- private MeshFilter meshFilter;
- private Mesh mesh, mesh1, mesh2;
- private bool useMesh1;
- private float[] vertexPositions = new float[8];
- private int lastVertexCount;
- private Vector3[] vertices;
- private Color32[] colors;
- private Vector2[] uvs;
- private Material[] sharedMaterials = new Material[0];
- private List submeshMaterials = new List();
- private List submeshes = new List();
-
- /// False if Initialize needs to be called.
- public bool Initialized {
- get {
- if (skeletonDataAsset == null) return true;
- SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false);
- if (skeletonData == null) return true;
- return skeleton != null && skeleton.Data == skeletonData;
- }
- }
-
- public virtual void Clear () {
- if (meshFilter != null) meshFilter.sharedMesh = null;
- if (mesh != null) DestroyImmediate(mesh);
- if (renderer != null) renderer.sharedMaterial = null;
- mesh = null;
- mesh1 = null;
- mesh2 = null;
- lastVertexCount = 0;
- vertices = null;
- colors = null;
- uvs = null;
- sharedMaterials = new Material[0];
- submeshMaterials.Clear();
- submeshes.Clear();
- skeleton = null;
- }
-
- public virtual void Initialize () {
- if (Initialized) return;
-
- meshFilter = GetComponent();
- mesh1 = newMesh();
- mesh2 = newMesh();
-
- vertices = new Vector3[0];
-
- skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData(false));
-
- if (initialSkinName != null && initialSkinName.Length > 0 && initialSkinName != "default") {
- skeleton.SetSkin(initialSkinName);
- skeleton.SetSlotsToSetupPose();
- }
- }
-
- private Mesh newMesh () {
- Mesh mesh = new Mesh();
- mesh.name = "Skeleton Mesh";
- mesh.hideFlags = HideFlags.HideAndDontSave;
- mesh.MarkDynamic();
- return mesh;
- }
-
- public virtual void UpdateSkeleton (float deltaTime) {
- skeleton.Update(deltaTime * timeScale);
- skeleton.UpdateWorldTransform();
- }
-
- public virtual void Update () {
- if (skeletonDataAsset == null) {
- Clear();
- return;
- }
-
- SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false);
-
- if (skeletonData == null) {
- Clear();
- return;
- }
-
- // Initialize fields.
- if (skeleton == null || skeleton.Data != skeletonData)
- Initialize();
-
- UpdateSkeleton(Time.deltaTime);
-
- // Count quads and submeshes.
- int quadCount = 0, submeshQuadCount = 0;
- Material lastMaterial = null;
- submeshMaterials.Clear();
- List drawOrder = skeleton.DrawOrder;
- for (int i = 0, n = drawOrder.Count; i < n; i++) {
- RegionAttachment regionAttachment = drawOrder[i].Attachment as RegionAttachment;
- if (regionAttachment == null)
- continue;
-
- // Add submesh when material changes.
- Material material = (Material)regionAttachment.RendererObject;
- if (lastMaterial != material && lastMaterial != null) {
- addSubmesh(lastMaterial, quadCount, submeshQuadCount, false);
- submeshQuadCount = 0;
- }
- lastMaterial = material;
-
- quadCount++;
- submeshQuadCount++;
- }
- addSubmesh(lastMaterial, quadCount, submeshQuadCount, true);
-
- // Set materials.
- if (submeshMaterials.Count == sharedMaterials.Length)
- submeshMaterials.CopyTo(sharedMaterials);
- else
- sharedMaterials = submeshMaterials.ToArray();
- renderer.sharedMaterials = sharedMaterials;
-
- // Double buffer mesh.
- Mesh mesh = useMesh1 ? mesh1 : mesh2;
- meshFilter.sharedMesh = mesh;
-
- // Ensure mesh data is the right size.
- Vector3[] vertices = this.vertices;
- int vertexCount = quadCount * 4;
- bool newTriangles = vertexCount > vertices.Length;
- if (newTriangles) {
- // Not enough vertices, increase size.
- this.vertices = vertices = new Vector3[vertexCount];
- this.colors = new Color32[vertexCount];
- this.uvs = new Vector2[vertexCount];
- mesh1.Clear();
- mesh2.Clear();
- } else {
- // Too many vertices, zero the extra.
- Vector3 zero = Vector3.zero;
- for (int i = vertexCount, n = lastVertexCount; i < n; i++)
- vertices[i] = zero;
- }
- lastVertexCount = vertexCount;
-
- // Setup mesh.
- float[] vertexPositions = this.vertexPositions;
- Vector2[] uvs = this.uvs;
- Color32[] colors = this.colors;
- int vertexIndex = 0;
- Color32 color = new Color32();
- float a = skeleton.A * 255, r = skeleton.R, g = skeleton.G, b = skeleton.B, zSpacing = this.zSpacing;
- for (int i = 0, n = drawOrder.Count; i < n; i++) {
- Slot slot = drawOrder[i];
- RegionAttachment regionAttachment = slot.Attachment as RegionAttachment;
- if (regionAttachment == null)
- continue;
-
- regionAttachment.ComputeWorldVertices(skeleton.X, skeleton.Y, slot.Bone, vertexPositions);
-
- float z = i * zSpacing;
- vertices[vertexIndex] = new Vector3(vertexPositions[RegionAttachment.X1], vertexPositions[RegionAttachment.Y1], z);
- vertices[vertexIndex + 1] = new Vector3(vertexPositions[RegionAttachment.X4], vertexPositions[RegionAttachment.Y4], z);
- vertices[vertexIndex + 2] = new Vector3(vertexPositions[RegionAttachment.X2], vertexPositions[RegionAttachment.Y2], z);
- vertices[vertexIndex + 3] = new Vector3(vertexPositions[RegionAttachment.X3], vertexPositions[RegionAttachment.Y3], z);
-
- color.a = (byte)(a * slot.A);
- color.r = (byte)(r * slot.R * color.a);
- color.g = (byte)(g * slot.G * color.a);
- color.b = (byte)(b * slot.B * color.a);
- if (slot.Data.AdditiveBlending) color.a = 0;
- colors[vertexIndex] = color;
- colors[vertexIndex + 1] = color;
- colors[vertexIndex + 2] = color;
- colors[vertexIndex + 3] = color;
-
- float[] regionUVs = regionAttachment.UVs;
- uvs[vertexIndex] = new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1]);
- uvs[vertexIndex + 1] = new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4]);
- uvs[vertexIndex + 2] = new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2]);
- uvs[vertexIndex + 3] = new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3]);
-
- vertexIndex += 4;
- }
-
- mesh.vertices = vertices;
- mesh.colors32 = colors;
- mesh.uv = uvs;
-
- int submeshCount = submeshMaterials.Count;
- mesh.subMeshCount = submeshCount;
- for (int i = 0; i < submeshCount; ++i)
- mesh.SetTriangles(submeshes[i].indexes, i);
- mesh.RecalculateBounds();
-
- if (newTriangles && calculateNormals) {
- Vector3[] normals = new Vector3[vertexCount];
- Vector3 normal = new Vector3(0, 0, -1);
- for (int i = 0; i < vertexCount; i++)
- normals[i] = normal;
- (useMesh1 ? mesh2 : mesh1).vertices = vertices; // Set other mesh vertices.
- mesh1.normals = normals;
- mesh2.normals = normals;
-
- if (calculateTangents) {
- Vector4[] tangents = new Vector4[vertexCount];
- Vector3 tangent = new Vector3(0, 0, 1);
- for (int i = 0; i < vertexCount; i++)
- tangents[i] = tangent;
- mesh1.tangents = tangents;
- mesh2.tangents = tangents;
- }
- }
-
- useMesh1 = !useMesh1;
- }
-
- /** Adds a material. Adds submesh indexes if existing indexes aren't sufficient. */
- private void addSubmesh (Material material, int endQuadCount, int submeshQuadCount, bool lastSubmesh) {
- int submeshIndex = submeshMaterials.Count;
- submeshMaterials.Add(material);
-
- int indexCount = submeshQuadCount * 6;
- int vertexIndex = (endQuadCount - submeshQuadCount) * 4;
-
- if (submeshes.Count <= submeshIndex) submeshes.Add(new Submesh());
- Submesh submesh = submeshes[submeshIndex];
-
- int[] indexes = submesh.indexes;
- if (lastSubmesh && submesh.indexCount > indexCount) {
- // Last submesh may have more indices than required, so zero indexes to the end.
- submesh.indexCount = indexCount;
- for (int i = indexCount, n = indexes.Length; i < n; i++)
- indexes[i] = 0;
- } else if (indexes.Length != indexCount) {
- // Reallocate indexes if not the right size.
- submesh.indexes = indexes = new int[indexCount];
- submesh.indexCount = 0;
- }
-
- // Set indexes if not already set.
- if (submesh.firstVertex != vertexIndex || submesh.indexCount < indexCount) {
- submesh.indexCount = indexCount;
- submesh.firstVertex = vertexIndex;
- for (int i = 0; i < indexCount; i += 6, vertexIndex += 4) {
- indexes[i] = vertexIndex;
- indexes[i + 1] = vertexIndex + 2;
- indexes[i + 2] = vertexIndex + 1;
- indexes[i + 3] = vertexIndex + 2;
- indexes[i + 4] = vertexIndex + 3;
- indexes[i + 5] = vertexIndex + 1;
- }
- }
- }
-
- public virtual void OnEnable () {
- Initialize();
- }
-
- public virtual void Reset () {
- Initialize();
- }
-
-#if UNITY_EDITOR
- void OnDrawGizmos() {
- // Make selection easier by drawing a clear gizmo over the skeleton.
- if (vertices == null) return;
- Vector3 gizmosCenter = new Vector3();
- Vector3 gizmosSize = new Vector3();
- Vector3 min = new Vector3(float.MaxValue, float.MaxValue, 0f);
- Vector3 max = new Vector3(float.MinValue, float.MinValue, 0f);
- foreach (Vector3 vert in vertices) {
- min = Vector3.Min (min, vert);
- max = Vector3.Max (max, vert);
- }
- float width = max.x - min.x;
- float height = max.y - min.y;
- gizmosCenter = new Vector3(min.x + (width / 2f), min.y + (height / 2f), 0f);
- gizmosSize = new Vector3(width, height, 1f);
- Gizmos.color = Color.clear;
- Gizmos.matrix = transform.localToWorldMatrix;
- Gizmos.DrawCube(gizmosCenter, gizmosSize);
- }
-#endif
-}
-
-class Submesh {
- public int[] indexes = new int[0];
- public int firstVertex = -1;
- public int indexCount;
-}
diff --git a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs
index a6b2557ea..fcf90df0e 100644
--- a/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs
+++ b/spine-tk2d/Assets/Spine/SkeletonDataAsset.cs
@@ -30,6 +30,7 @@
using System;
using System.IO;
+using System.Collections.Generic;
using UnityEngine;
using Spine;
@@ -51,14 +52,14 @@ public class SkeletonDataAsset : ScriptableObject {
public SkeletonData GetSkeletonData (bool quiet) {
if (spriteCollection == null) {
if (!quiet)
- Debug.LogWarning("Sprite collection not set for skeleton data asset: " + name, this);
+ Debug.LogError("Sprite collection not set for skeleton data asset: " + name, this);
Clear();
return null;
}
-
+
if (skeletonJSON == null) {
if (!quiet)
- Debug.LogWarning("Skeleton JSON file not set for skeleton data asset: " + name, this);
+ Debug.LogError("Skeleton JSON file not set for skeleton data asset: " + name, this);
Clear();
return null;
}
@@ -68,19 +69,17 @@ public class SkeletonDataAsset : ScriptableObject {
SkeletonJson json = new SkeletonJson(new SpriteCollectionAttachmentLoader(spriteCollection));
json.Scale = 1.0f / (spriteCollection.invOrthoSize * spriteCollection.halfTargetHeight) * scale;
-
try {
skeletonData = json.ReadSkeletonData(new StringReader(skeletonJSON.text));
} catch (Exception ex) {
- Debug.Log("Error reading skeleton JSON file for skeleton data asset: " + name + "\n" +
- ex.Message + "\n" + ex.StackTrace, this);
+ if (!quiet)
+ Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this);
return null;
}
stateData = new AnimationStateData(skeletonData);
for (int i = 0, n = fromAnimation.Length; i < n; i++) {
- if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0)
- continue;
+ if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0) continue;
stateData.SetMix(fromAnimation[i], toAnimation[i], duration[i]);
}
diff --git a/spine-tk2d/Assets/Spine/SkeletonRenderer.cs b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs
new file mode 100644
index 000000000..69c668079
--- /dev/null
+++ b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs
@@ -0,0 +1,366 @@
+/******************************************************************************
+ * Spine Runtimes Software License
+ * Version 2.1
+ *
+ * Copyright (c) 2013, Esoteric Software
+ * All rights reserved.
+ *
+ * You are granted a perpetual, non-exclusive, non-sublicensable and
+ * non-transferable license to install, execute and perform the Spine Runtimes
+ * Software (the "Software") solely for internal use. Without the written
+ * permission of Esoteric Software (typically granted by licensing Spine), you
+ * may not (a) modify, translate, adapt or otherwise create derivative works,
+ * improvements of the Software or develop new applications using the Software
+ * or (b) remove, delete, alter or obscure any trademarks or any copyright,
+ * trademark, patent or other intellectual property or proprietary rights
+ * notices on or in the Software, including any copy thereof. Redistributions
+ * in binary or source form must include this license and terms.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using UnityEngine;
+using Spine;
+
+/// Renders a skeleton.
+[ExecuteInEditMode, RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
+public class SkeletonRenderer : MonoBehaviour {
+ public bool valid;
+ public Skeleton skeleton;
+
+ public SkeletonDataAsset skeletonDataAsset;
+ public String initialSkinName;
+ public bool calculateNormals;
+ public bool calculateTangents;
+ public float zSpacing;
+
+ private MeshFilter meshFilter;
+ private Mesh mesh, mesh1, mesh2;
+ private bool useMesh1;
+ private float[] tempVertices = new float[8];
+ private int lastVertexCount;
+ private Vector3[] vertices;
+ private Color32[] colors;
+ private Vector2[] uvs;
+ private Material[] sharedMaterials = new Material[0];
+ private readonly List submeshMaterials = new List();
+ private readonly List submeshes = new List();
+ private readonly int[] quadTriangles = {0, 2, 1, 2, 3, 1};
+
+ public virtual void Reset () {
+ if (meshFilter != null) meshFilter.sharedMesh = null;
+ if (mesh != null) DestroyImmediate(mesh);
+ if (renderer != null) renderer.sharedMaterial = null;
+ mesh = null;
+ mesh1 = null;
+ mesh2 = null;
+ lastVertexCount = 0;
+ vertices = null;
+ colors = null;
+ uvs = null;
+ sharedMaterials = new Material[0];
+ submeshMaterials.Clear();
+ submeshes.Clear();
+ skeleton = null;
+
+ if (!skeletonDataAsset) {
+ Debug.LogError("Missing SkeletonData asset.", this);
+ valid = false;
+ return;
+ }
+ valid = true;
+
+ meshFilter = GetComponent();
+ mesh1 = newMesh();
+ mesh2 = newMesh();
+ vertices = new Vector3[0];
+
+ skeleton = new Skeleton(skeletonDataAsset.GetSkeletonData(false));
+ if (initialSkinName != null && initialSkinName.Length > 0 && initialSkinName != "default")
+ skeleton.SetSkin(initialSkinName);
+ }
+
+ public void Awake () {
+ Reset();
+ }
+
+ private Mesh newMesh () {
+ Mesh mesh = new Mesh();
+ mesh.name = "Skeleton Mesh";
+ mesh.hideFlags = HideFlags.HideAndDontSave;
+ mesh.MarkDynamic();
+ return mesh;
+ }
+
+ public virtual void OnWillRenderObject () {
+ if (!valid) return;
+
+ // Count vertices and submesh triangles.
+ int vertexCount = 0;
+ int submeshTriangleCount = 0, submeshFirstVertex = 0, submeshStartSlotIndex = 0;
+ Material lastMaterial = null;
+ submeshMaterials.Clear();
+ List drawOrder = skeleton.DrawOrder;
+ int drawOrderCount = drawOrder.Count;
+ for (int i = 0; i < drawOrderCount; i++) {
+ Attachment attachment = drawOrder[i].attachment;
+
+ object rendererObject;
+ int attachmentVertexCount, attachmentTriangleCount;
+
+ if (attachment is RegionAttachment) {
+ rendererObject = ((RegionAttachment)attachment).RendererObject;
+ attachmentVertexCount = 4;
+ attachmentTriangleCount = 6;
+ } else if (attachment is MeshAttachment) {
+ MeshAttachment meshAttachment = (MeshAttachment)attachment;
+ rendererObject = meshAttachment.RendererObject;
+ attachmentVertexCount = meshAttachment.vertices.Length / 2;
+ attachmentTriangleCount = meshAttachment.triangles.Length;
+ } else if (attachment is SkinnedMeshAttachment) {
+ SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment;
+ rendererObject = meshAttachment.RendererObject;
+ attachmentVertexCount = meshAttachment.uvs.Length / 2;
+ attachmentTriangleCount = meshAttachment.triangles.Length;
+ } else
+ continue;
+
+ // Populate submesh when material changes.
+ Material material = (Material)rendererObject;
+ if (lastMaterial != material && lastMaterial != null) {
+ addSubmesh(lastMaterial, submeshStartSlotIndex, i, submeshTriangleCount, submeshFirstVertex, false);
+ submeshTriangleCount = 0;
+ submeshFirstVertex = vertexCount;
+ submeshStartSlotIndex = i;
+ }
+ lastMaterial = material;
+
+ submeshTriangleCount += attachmentTriangleCount;
+ vertexCount += attachmentVertexCount;
+ }
+ addSubmesh(lastMaterial, submeshStartSlotIndex, drawOrderCount, submeshTriangleCount, submeshFirstVertex, true);
+
+ // Set materials.
+ if (submeshMaterials.Count == sharedMaterials.Length)
+ submeshMaterials.CopyTo(sharedMaterials);
+ else
+ sharedMaterials = submeshMaterials.ToArray();
+ renderer.sharedMaterials = sharedMaterials;
+
+ // Ensure mesh data is the right size.
+ Vector3[] vertices = this.vertices;
+ bool newTriangles = vertexCount > vertices.Length;
+ if (newTriangles) {
+ // Not enough vertices, increase size.
+ this.vertices = vertices = new Vector3[vertexCount];
+ this.colors = new Color32[vertexCount];
+ this.uvs = new Vector2[vertexCount];
+ mesh1.Clear();
+ mesh2.Clear();
+ } else {
+ // Too many vertices, zero the extra.
+ Vector3 zero = Vector3.zero;
+ for (int i = vertexCount, n = lastVertexCount; i < n; i++)
+ vertices[i] = zero;
+ }
+ lastVertexCount = vertexCount;
+
+ // Setup mesh.
+ float[] tempVertices = this.tempVertices;
+ Vector2[] uvs = this.uvs;
+ Color32[] colors = this.colors;
+ int vertexIndex = 0;
+ Color32 color = new Color32();
+ float x = skeleton.x, y = skeleton.y, zSpacing = this.zSpacing;
+ float a = skeleton.a * 255, r = skeleton.r, g = skeleton.g, b = skeleton.b;
+ for (int i = 0; i < drawOrderCount; i++) {
+ Slot slot = drawOrder[i];
+ Attachment attachment = slot.attachment;
+ if (attachment is RegionAttachment) {
+ RegionAttachment regionAttachment = (RegionAttachment)attachment;
+ regionAttachment.ComputeWorldVertices(x, y, slot.bone, tempVertices);
+
+ float z = i * zSpacing;
+ vertices[vertexIndex] = new Vector3(tempVertices[RegionAttachment.X1], tempVertices[RegionAttachment.Y1], z);
+ vertices[vertexIndex + 1] = new Vector3(tempVertices[RegionAttachment.X4], tempVertices[RegionAttachment.Y4], z);
+ vertices[vertexIndex + 2] = new Vector3(tempVertices[RegionAttachment.X2], tempVertices[RegionAttachment.Y2], z);
+ vertices[vertexIndex + 3] = new Vector3(tempVertices[RegionAttachment.X3], tempVertices[RegionAttachment.Y3], z);
+
+ color.a = (byte)(a * slot.a * regionAttachment.a);
+ color.r = (byte)(r * slot.r * regionAttachment.r * color.a);
+ color.g = (byte)(g * slot.g * regionAttachment.g * color.a);
+ color.b = (byte)(b * slot.b * regionAttachment.b * color.a);
+ if (slot.data.additiveBlending) color.a = 0;
+ colors[vertexIndex] = color;
+ colors[vertexIndex + 1] = color;
+ colors[vertexIndex + 2] = color;
+ colors[vertexIndex + 3] = color;
+
+ float[] regionUVs = regionAttachment.uvs;
+ uvs[vertexIndex] = new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1]);
+ uvs[vertexIndex + 1] = new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4]);
+ uvs[vertexIndex + 2] = new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2]);
+ uvs[vertexIndex + 3] = new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3]);
+
+ vertexIndex += 4;
+ } else if (attachment is MeshAttachment) {
+ MeshAttachment meshAttachment = (MeshAttachment)attachment;
+ int meshVertexCount = meshAttachment.vertices.Length;
+ if (tempVertices.Length < meshVertexCount) tempVertices = new float[meshVertexCount];
+ meshAttachment.ComputeWorldVertices(x, y, slot, tempVertices);
+
+ color.a = (byte)(a * slot.a * meshAttachment.a);
+ color.r = (byte)(r * slot.r * meshAttachment.r * color.a);
+ color.g = (byte)(g * slot.g * meshAttachment.g * color.a);
+ color.b = (byte)(b * slot.b * meshAttachment.b * color.a);
+ if (slot.data.additiveBlending) color.a = 0;
+
+ float[] meshUVs = meshAttachment.uvs;
+ float z = i * zSpacing;
+ for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) {
+ vertices[vertexIndex] = new Vector3(tempVertices[ii], tempVertices[ii + 1], z);
+ colors[vertexIndex] = color;
+ uvs[vertexIndex] = new Vector2(meshUVs[ii], meshUVs[ii + 1]);
+ }
+ } else if (attachment is SkinnedMeshAttachment) {
+ SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment;
+ int meshVertexCount = meshAttachment.uvs.Length;
+ if (tempVertices.Length < meshVertexCount) tempVertices = new float[meshVertexCount];
+ meshAttachment.ComputeWorldVertices(x, y, slot, tempVertices);
+
+ color.a = (byte)(a * slot.a * meshAttachment.a);
+ color.r = (byte)(r * slot.r * meshAttachment.r * color.a);
+ color.g = (byte)(g * slot.g * meshAttachment.g * color.a);
+ color.b = (byte)(b * slot.b * meshAttachment.b * color.a);
+ if (slot.data.additiveBlending) color.a = 0;
+
+ float[] meshUVs = meshAttachment.uvs;
+ float z = i * zSpacing;
+ for (int ii = 0; ii < meshVertexCount; ii += 2, vertexIndex++) {
+ vertices[vertexIndex] = new Vector3(tempVertices[ii], tempVertices[ii + 1], z);
+ colors[vertexIndex] = color;
+ uvs[vertexIndex] = new Vector2(meshUVs[ii], meshUVs[ii + 1]);
+ }
+ }
+ }
+
+ // Double buffer mesh.
+ Mesh mesh = useMesh1 ? mesh1 : mesh2;
+ meshFilter.sharedMesh = mesh;
+
+ mesh.vertices = vertices;
+ mesh.colors32 = colors;
+ mesh.uv = uvs;
+
+ int submeshCount = submeshMaterials.Count;
+ mesh.subMeshCount = submeshCount;
+ for (int i = 0; i < submeshCount; ++i)
+ mesh.SetTriangles(submeshes[i].triangles, i);
+ mesh.RecalculateBounds();
+
+ if (newTriangles && calculateNormals) {
+ Vector3[] normals = new Vector3[vertexCount];
+ Vector3 normal = new Vector3(0, 0, -1);
+ for (int i = 0; i < vertexCount; i++)
+ normals[i] = normal;
+ (useMesh1 ? mesh2 : mesh1).vertices = vertices; // Set other mesh vertices.
+ mesh1.normals = normals;
+ mesh2.normals = normals;
+
+ if (calculateTangents) {
+ Vector4[] tangents = new Vector4[vertexCount];
+ Vector3 tangent = new Vector3(0, 0, 1);
+ for (int i = 0; i < vertexCount; i++)
+ tangents[i] = tangent;
+ mesh1.tangents = tangents;
+ mesh2.tangents = tangents;
+ }
+ }
+
+ useMesh1 = !useMesh1;
+ }
+
+ /** Stores vertices and triangles for a single material. */
+ private void addSubmesh (Material material, int startSlot, int endSlot, int triangleCount, int firstVertex, bool lastSubmesh) {
+ int submeshIndex = submeshMaterials.Count;
+ submeshMaterials.Add(material);
+
+ if (submeshes.Count <= submeshIndex) submeshes.Add(new Submesh());
+ Submesh submesh = submeshes[submeshIndex];
+
+ int[] triangles = submesh.triangles;
+ int trianglesCapacity = triangles.Length;
+ if (lastSubmesh && trianglesCapacity > triangleCount) {
+ // Last submesh may have more triangles than required, so zero triangles to the end.
+ for (int i = triangleCount; i < trianglesCapacity; i++)
+ triangles[i] = 0;
+ submesh.triangleCount = triangleCount;
+ } else if (trianglesCapacity != triangleCount) {
+ // Reallocate triangles when not the exact size needed.
+ submesh.triangles = triangles = new int[triangleCount];
+ submesh.triangleCount = 0;
+ }
+
+ List drawOrder = skeleton.DrawOrder;
+ for (int i = startSlot, triangleIndex = 0; i < endSlot; i++) {
+ Attachment attachment = drawOrder[i].attachment;
+ int[] attachmentTriangles;
+ int attachmentVertexCount;
+ if (attachment is RegionAttachment) {
+ attachmentVertexCount = 4;
+ attachmentTriangles = quadTriangles;
+ } else if (attachment is MeshAttachment) {
+ MeshAttachment meshAttachment = (MeshAttachment)attachment;
+ attachmentVertexCount = meshAttachment.vertices.Length / 2;
+ attachmentTriangles = meshAttachment.triangles;
+ } else if (attachment is SkinnedMeshAttachment) {
+ SkinnedMeshAttachment meshAttachment = (SkinnedMeshAttachment)attachment;
+ attachmentVertexCount = meshAttachment.uvs.Length / 2;
+ attachmentTriangles = meshAttachment.triangles;
+ } else
+ continue;
+ for (int ii = 0, nn = attachmentTriangles.Length; ii < nn; ii++, triangleIndex++)
+ triangles[triangleIndex] = firstVertex + attachmentTriangles[ii];
+ firstVertex += attachmentVertexCount;
+ }
+ }
+
+ #if UNITY_EDITOR
+ void OnDrawGizmos() {
+ // Make selection easier by drawing a clear gizmo over the skeleton.
+ if (vertices == null) return;
+ Vector3 gizmosCenter = new Vector3();
+ Vector3 gizmosSize = new Vector3();
+ Vector3 min = new Vector3(float.MaxValue, float.MaxValue, 0f);
+ Vector3 max = new Vector3(float.MinValue, float.MinValue, 0f);
+ foreach (Vector3 vert in vertices) {
+ min = Vector3.Min (min, vert);
+ max = Vector3.Max (max, vert);
+ }
+ float width = max.x - min.x;
+ float height = max.y - min.y;
+ gizmosCenter = new Vector3(min.x + (width / 2f), min.y + (height / 2f), 0f);
+ gizmosSize = new Vector3(width, height, 1f);
+ Gizmos.color = Color.clear;
+ Gizmos.matrix = transform.localToWorldMatrix;
+ Gizmos.DrawCube(gizmosCenter, gizmosSize);
+ }
+ #endif
+}
+
+class Submesh {
+ public int[] triangles = new int[0];
+ public int triangleCount;
+}
diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta
similarity index 78%
rename from spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta
rename to spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta
index c765d154a..1bc275571 100644
--- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs.meta
+++ b/spine-tk2d/Assets/Spine/SkeletonRenderer.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 9da572b571dc33444bd6622951ef62ba
+guid: 0f77b79230dc4c246a1194a03578bb4e
MonoImporter:
serializedVersion: 2
defaultReferences: []
diff --git a/spine-tk2d/Assets/examples/goblins.meta b/spine-tk2d/Assets/examples/goblins.meta
new file mode 100644
index 000000000..c23c0f726
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: a9308cf14d9ae5040ad789b02f1b3baf
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset
new file mode 100644
index 000000000..f76e1dbf7
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset differ
diff --git a/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta
new file mode 100644
index 000000000..8aaba0e3b
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/Goblins SkeletonData.asset.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 4a195bd4c354a814b86d191f4921f54b
+NativeFormatImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/Goblins.cs b/spine-tk2d/Assets/examples/goblins/Goblins.cs
new file mode 100644
index 000000000..c30e677b0
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/Goblins.cs
@@ -0,0 +1,63 @@
+/******************************************************************************
+ * Spine Runtimes Software License
+ * Version 2.1
+ *
+ * Copyright (c) 2013, Esoteric Software
+ * All rights reserved.
+ *
+ * You are granted a perpetual, non-exclusive, non-sublicensable and
+ * non-transferable license to install, execute and perform the Spine Runtimes
+ * Software (the "Software") solely for internal use. Without the written
+ * permission of Esoteric Software (typically granted by licensing Spine), you
+ * may not (a) modify, translate, adapt or otherwise create derivative works,
+ * improvements of the Software or develop new applications using the Software
+ * or (b) remove, delete, alter or obscure any trademarks or any copyright,
+ * trademark, patent or other intellectual property or proprietary rights
+ * notices on or in the Software, including any copy thereof. Redistributions
+ * in binary or source form must include this license and terms.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *****************************************************************************/
+
+using UnityEngine;
+using System.Collections;
+using Spine;
+
+public class Goblins : MonoBehaviour {
+ private bool girlSkin;
+ private SkeletonAnimation skeletonAnimation;
+ private Bone headBone;
+
+ public void Start () {
+ skeletonAnimation = GetComponent();
+ headBone = skeletonAnimation.skeleton.FindBone("head");
+ skeletonAnimation.UpdateBones += UpdateBones;
+ }
+
+ // This is called after the animation is applied to the skeleton and can be used to adjust the bones dynamically.
+ public void UpdateBones (SkeletonAnimation skeletonAnimation) {
+ headBone.Rotation += 15;
+ }
+
+ public void OnMouseDown () {
+ skeletonAnimation.skeleton.SetSkin(girlSkin ? "goblin" : "goblingirl");
+ skeletonAnimation.skeleton.SetSlotsToSetupPose();
+
+ girlSkin = !girlSkin;
+
+ if (girlSkin) {
+ skeletonAnimation.skeleton.SetAttachment("right hand item", null);
+ skeletonAnimation.skeleton.SetAttachment("left hand item", "spear");
+ } else
+ skeletonAnimation.skeleton.SetAttachment("left hand item", "dagger");
+ }
+}
diff --git a/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta b/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta
new file mode 100644
index 000000000..7a04efa06
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/Goblins.cs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3a41b9a80b4f2c045b7ad76e0d652ddc
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta
new file mode 100644
index 000000000..1211c5e9f
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 982b49f422d2cb04bbaf38993fef207b
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab
new file mode 100644
index 000000000..bc65b6ebb
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab differ
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta
new file mode 100644
index 000000000..d04510ff6
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/GoblinsAtlas.prefab.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 31c989bbbeeeab24e99b68ac7975d2b8
+NativeFormatImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat
new file mode 100644
index 000000000..4628c57e2
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat differ
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta
new file mode 100644
index 000000000..d30a0f6fe
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0 material.mat.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 0b38b0b706d87b04ab4621c37c7d5019
+NativeFormatImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png
new file mode 100644
index 000000000..d6820aa68
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta
new file mode 100644
index 000000000..19b7c864d
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas Data/atlas0.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: e76e8228e3b38264194b3dfad10b7af7
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 1024
+ textureSettings:
+ filterMode: 1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 0
+ textureType: -1
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab
new file mode 100644
index 000000000..08d4890a3
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab differ
diff --git a/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta
new file mode 100644
index 000000000..788714172
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/GoblinsAtlas.prefab.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: db91f44e9acec474fb74db538fe06935
+NativeFormatImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt
new file mode 100644
index 000000000..a778c0f15
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt
@@ -0,0 +1,1005 @@
+{
+"bones": [
+ { "name": "root" },
+ { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 },
+ { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 },
+ { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 },
+ { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 },
+ { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 },
+ { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 },
+ { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 },
+ { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 },
+ { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 },
+ { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 },
+ { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 },
+ { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 },
+ { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 },
+ { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 },
+ { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 },
+ { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 },
+ { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 },
+ { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 },
+ { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 },
+ { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 }
+],
+"slots": [
+ { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" },
+ { "name": "left arm", "bone": "left arm", "attachment": "left arm" },
+ { "name": "left hand item", "bone": "left hand", "attachment": "spear" },
+ { "name": "left hand", "bone": "left hand", "attachment": "left hand" },
+ { "name": "left foot", "bone": "left foot", "attachment": "left foot" },
+ { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" },
+ { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" },
+ { "name": "neck", "bone": "neck", "attachment": "neck" },
+ { "name": "torso", "bone": "torso", "attachment": "torso" },
+ { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" },
+ { "name": "right foot", "bone": "right foot", "attachment": "right foot" },
+ { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" },
+ { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" },
+ { "name": "undies", "bone": "pelvis", "attachment": "undies" },
+ { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" },
+ { "name": "head", "bone": "head", "attachment": "head" },
+ { "name": "eyes", "bone": "head" },
+ { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" },
+ { "name": "right arm", "bone": "right arm", "attachment": "right arm" },
+ { "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" },
+ { "name": "right hand item", "bone": "right hand", "attachment": "dagger" },
+ { "name": "right hand", "bone": "right hand", "attachment": "right hand" },
+ { "name": "right hand item 2", "bone": "right hand", "attachment": "shield" }
+],
+"skins": {
+ "default": {
+ "left hand item": {
+ "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 },
+ "spear": {
+ "type": "skinnedmesh",
+ "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ],
+ "triangles": [ 4, 7, 3, 6, 7, 4, 5, 6, 4, 10, 11, 12, 1, 13, 0, 12, 13, 1, 10, 12, 1, 9, 10, 1, 2, 9, 1, 8, 9, 2, 3, 8, 2, 7, 8, 3 ],
+ "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ],
+ "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ],
+ "hull": 14,
+ "width": 22,
+ "height": 368
+ }
+ },
+ "right hand item": {
+ "dagger": {
+ "type": "mesh",
+ "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ],
+ "triangles": [ 5, 7, 8, 4, 8, 3, 4, 5, 8, 5, 6, 7, 9, 11, 8, 8, 11, 3, 3, 0, 2, 3, 11, 0, 9, 10, 11, 0, 1, 2, 11, 12, 0, 0, 12, 13 ],
+ "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ],
+ "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ],
+ "hull": 14,
+ "width": 26,
+ "height": 108
+ }
+ },
+ "right hand item 2": {
+ "shield": { "rotation": 93.49, "width": 70, "height": 72 }
+ }
+ },
+ "goblin": {
+ "eyes": {
+ "eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 }
+ },
+ "head": {
+ "head": {
+ "name": "goblin/head",
+ "type": "mesh",
+ "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ],
+ "triangles": [ 5, 27, 6, 7, 27, 8, 7, 6, 27, 4, 24, 5, 5, 24, 27, 4, 3, 24, 27, 29, 8, 8, 29, 9, 24, 28, 27, 24, 25, 28, 24, 3, 25, 29, 28, 30, 29, 27, 28, 25, 2, 26, 25, 3, 2, 9, 29, 10, 0, 23, 1, 28, 25, 30, 29, 11, 10, 29, 30, 11, 2, 21, 26, 2, 1, 21, 23, 22, 1, 1, 22, 21, 30, 16, 11, 30, 17, 16, 30, 25, 17, 17, 26, 18, 18, 26, 19, 26, 17, 25, 11, 15, 12, 11, 16, 15, 12, 15, 13, 15, 14, 13, 21, 20, 26, 26, 20, 19 ],
+ "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ],
+ "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ],
+ "hull": 24,
+ "width": 103,
+ "height": 66
+ }
+ },
+ "left arm": {
+ "left arm": {
+ "name": "goblin/left-arm",
+ "type": "mesh",
+ "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ],
+ "triangles": [ 3, 4, 2, 4, 5, 2, 5, 0, 2, 0, 1, 2, 0, 5, 8, 5, 6, 8, 6, 7, 8 ],
+ "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ],
+ "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ],
+ "hull": 9,
+ "width": 37,
+ "height": 35
+ }
+ },
+ "left foot": {
+ "left foot": {
+ "name": "goblin/left-foot",
+ "type": "mesh",
+ "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ],
+ "triangles": [ 2, 1, 3, 3, 10, 4, 4, 11, 5, 4, 10, 11, 3, 1, 10, 11, 6, 5, 1, 0, 10, 11, 7, 6, 11, 10, 7, 10, 8, 7, 10, 0, 8, 0, 9, 8 ],
+ "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ],
+ "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ],
+ "hull": 10,
+ "width": 65,
+ "height": 31
+ }
+ },
+ "left hand": {
+ "left hand": {
+ "name": "goblin/left-hand",
+ "type": "mesh",
+ "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ],
+ "triangles": [ 2, 3, 0, 4, 5, 0, 3, 4, 0, 0, 7, 8, 6, 7, 0, 0, 5, 6, 2, 0, 1 ],
+ "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ],
+ "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ],
+ "hull": 9,
+ "width": 36,
+ "height": 41
+ }
+ },
+ "left lower leg": {
+ "left lower leg": {
+ "name": "goblin/left-lower-leg",
+ "type": "mesh",
+ "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ],
+ "triangles": [ 1, 3, 4, 7, 4, 5, 5, 6, 7, 3, 1, 2, 1, 4, 7, 0, 1, 10, 7, 8, 10, 1, 7, 10, 10, 8, 9 ],
+ "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ],
+ "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ],
+ "hull": 11,
+ "width": 33,
+ "height": 70
+ }
+ },
+ "left shoulder": {
+ "left shoulder": {
+ "name": "goblin/left-shoulder",
+ "type": "mesh",
+ "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ],
+ "triangles": [ 3, 1, 2, 3, 0, 1, 3, 4, 0, 4, 7, 0, 4, 5, 7, 5, 6, 7 ],
+ "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ],
+ "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ],
+ "hull": 8,
+ "width": 29,
+ "height": 44
+ }
+ },
+ "left upper leg": {
+ "left upper leg": {
+ "name": "goblin/left-upper-leg",
+ "type": "mesh",
+ "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ],
+ "triangles": [ 3, 4, 2, 2, 4, 1, 1, 4, 7, 4, 5, 7, 0, 1, 7, 5, 6, 7, 7, 8, 0 ],
+ "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ],
+ "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ],
+ "hull": 9,
+ "width": 33,
+ "height": 73
+ }
+ },
+ "neck": {
+ "neck": {
+ "name": "goblin/neck",
+ "type": "mesh",
+ "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ],
+ "triangles": [ 3, 5, 2, 2, 10, 1, 2, 5, 10, 3, 4, 5, 10, 0, 1, 0, 10, 6, 10, 5, 6, 7, 8, 6, 6, 9, 0, 6, 8, 9 ],
+ "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ],
+ "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ],
+ "hull": 10,
+ "width": 36,
+ "height": 41
+ }
+ },
+ "pelvis": {
+ "pelvis": {
+ "name": "goblin/pelvis",
+ "type": "mesh",
+ "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ],
+ "triangles": [ 1, 3, 0, 1, 2, 3 ],
+ "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ],
+ "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ],
+ "hull": 4,
+ "width": 62,
+ "height": 43
+ }
+ },
+ "right arm": {
+ "right arm": {
+ "name": "goblin/right-arm",
+ "type": "mesh",
+ "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ],
+ "triangles": [ 1, 2, 6, 6, 2, 5, 1, 6, 0, 4, 5, 3, 2, 3, 5, 6, 7, 0 ],
+ "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ],
+ "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ],
+ "hull": 8,
+ "width": 23,
+ "height": 50
+ }
+ },
+ "right foot": {
+ "right foot": {
+ "name": "goblin/right-foot",
+ "type": "mesh",
+ "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ],
+ "triangles": [ 4, 5, 15, 7, 14, 6, 5, 6, 15, 6, 14, 15, 14, 7, 9, 7, 8, 9, 15, 3, 4, 9, 10, 14, 15, 2, 3, 15, 14, 2, 14, 10, 1, 12, 1, 11, 1, 12, 13, 14, 1, 2, 1, 13, 0, 1, 10, 11 ],
+ "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ],
+ "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ],
+ "hull": 14,
+ "width": 63,
+ "height": 33
+ }
+ },
+ "right hand": {
+ "right hand": {
+ "name": "goblin/right-hand",
+ "type": "mesh",
+ "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ],
+ "triangles": [ 4, 7, 5, 5, 7, 6, 4, 3, 7, 3, 2, 8, 7, 3, 8, 8, 1, 10, 8, 2, 1, 0, 10, 1, 8, 10, 9 ],
+ "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ],
+ "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ],
+ "hull": 11,
+ "width": 36,
+ "height": 37
+ }
+ },
+ "right hand thumb": {
+ "right hand thumb": {
+ "name": "goblin/right-hand",
+ "type": "mesh",
+ "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ],
+ "triangles": [ 3, 2, 4, 2, 1, 4, 1, 0, 4 ],
+ "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ],
+ "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ],
+ "hull": 5,
+ "width": 36,
+ "height": 37
+ }
+ },
+ "right lower leg": {
+ "right lower leg": {
+ "name": "goblin/right-lower-leg",
+ "type": "mesh",
+ "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ],
+ "triangles": [ 4, 5, 2, 2, 5, 8, 5, 6, 8, 6, 7, 8, 4, 2, 3, 2, 8, 1, 8, 9, 1, 9, 10, 1, 1, 10, 0 ],
+ "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ],
+ "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ],
+ "hull": 11,
+ "width": 36,
+ "height": 76
+ }
+ },
+ "right shoulder": {
+ "right shoulder": {
+ "name": "goblin/right-shoulder",
+ "type": "mesh",
+ "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ],
+ "triangles": [ 4, 6, 7, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 0, 1, 2, 3, 0 ],
+ "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ],
+ "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ],
+ "hull": 8,
+ "width": 39,
+ "height": 45
+ }
+ },
+ "right upper leg": {
+ "right upper leg": {
+ "name": "goblin/right-upper-leg",
+ "type": "mesh",
+ "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ],
+ "triangles": [ 5, 4, 6, 6, 4, 2, 4, 3, 2, 2, 1, 6, 6, 1, 9, 6, 9, 7, 9, 1, 0, 9, 8, 7 ],
+ "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ],
+ "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ],
+ "hull": 10,
+ "width": 34,
+ "height": 63
+ }
+ },
+ "torso": {
+ "torso": {
+ "name": "goblin/torso",
+ "type": "mesh",
+ "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ],
+ "triangles": [ 5, 16, 6, 6, 16, 7, 4, 17, 5, 5, 17, 16, 4, 3, 17, 17, 21, 16, 16, 21, 7, 3, 2, 17, 21, 19, 18, 21, 17, 19, 17, 2, 19, 21, 8, 7, 21, 18, 8, 18, 9, 8, 19, 22, 18, 18, 10, 9, 18, 22, 10, 2, 1, 19, 19, 20, 22, 19, 1, 20, 22, 11, 10, 22, 20, 11, 20, 1, 14, 20, 12, 11, 1, 0, 14, 20, 13, 12, 20, 14, 13, 0, 15, 14 ],
+ "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ],
+ "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ],
+ "hull": 16,
+ "width": 68,
+ "height": 96
+ }
+ },
+ "undie straps": {
+ "undie straps": {
+ "name": "goblin/undie-straps",
+ "type": "mesh",
+ "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ],
+ "triangles": [ 5, 1, 4, 4, 1, 3, 6, 0, 5, 5, 0, 1, 3, 1, 2, 6, 8, 0, 6, 7, 8 ],
+ "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ],
+ "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ],
+ "hull": 9,
+ "width": 55,
+ "height": 19
+ }
+ },
+ "undies": {
+ "undies": {
+ "name": "goblin/undies",
+ "type": "mesh",
+ "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ],
+ "triangles": [ 3, 10, 4, 4, 10, 5, 10, 3, 1, 3, 2, 1, 1, 11, 10, 1, 0, 11, 10, 11, 5, 5, 11, 6, 0, 8, 11, 11, 8, 6, 0, 9, 8, 6, 8, 7 ],
+ "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ],
+ "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ],
+ "hull": 10,
+ "width": 36,
+ "height": 29
+ }
+ }
+ }
+},
+"animations": {
+ "walk": {
+ "slots": {
+ "eyes": {
+ "attachment": [
+ { "time": 0.7, "name": "eyes closed" },
+ { "time": 0.8, "name": null }
+ ]
+ }
+ },
+ "bones": {
+ "left upper leg": {
+ "rotate": [
+ { "time": 0, "angle": -26.55 },
+ { "time": 0.1333, "angle": -8.78 },
+ { "time": 0.2333, "angle": 9.51 },
+ { "time": 0.3666, "angle": 30.74 },
+ { "time": 0.5, "angle": 25.33 },
+ { "time": 0.6333, "angle": 26.11 },
+ { "time": 0.7333, "angle": 7.45 },
+ { "time": 0.8666, "angle": -21.19 },
+ { "time": 1, "angle": -26.55 }
+ ],
+ "translate": [
+ { "time": 0, "x": -1.32, "y": 1.7 },
+ { "time": 0.3666, "x": -0.06, "y": 2.42 },
+ { "time": 1, "x": -1.32, "y": 1.7 }
+ ]
+ },
+ "right upper leg": {
+ "rotate": [
+ { "time": 0, "angle": 42.45 },
+ {
+ "time": 0.1333,
+ "angle": 49.86,
+ "curve": [ 0.414, 0, 0.705, 0.99 ]
+ },
+ { "time": 0.2333, "angle": 22.51 },
+ { "time": 0.5, "angle": -16.93 },
+ { "time": 0.6333, "angle": 1.89 },
+ {
+ "time": 0.7333,
+ "angle": 34.86,
+ "curve": [ 0.462, 0.11, 1, 1 ]
+ },
+ {
+ "time": 0.8666,
+ "angle": 58.68,
+ "curve": [ 0.5, 0.02, 1, 1 ]
+ },
+ { "time": 1, "angle": 42.45 }
+ ],
+ "translate": [
+ { "time": 0, "x": 6.23, "y": 0 },
+ { "time": 0.2333, "x": 2.14, "y": 2.4 },
+ { "time": 0.5, "x": 2.44, "y": 4.8 },
+ { "time": 1, "x": 6.23, "y": 0 }
+ ]
+ },
+ "left lower leg": {
+ "rotate": [
+ { "time": 0, "angle": -18.05 },
+ { "time": 0.1333, "angle": -63.5 },
+ { "time": 0.2333, "angle": -83.01 },
+ { "time": 0.5, "angle": 5.11 },
+ { "time": 0.6333, "angle": -28.29 },
+ { "time": 0.7333, "angle": -27.52 },
+ { "time": 0.8666, "angle": 3.53 },
+ { "time": 1, "angle": -18.05 }
+ ],
+ "translate": [
+ { "time": 0, "x": 0, "y": 0 },
+ { "time": 0.2333, "x": 2.55, "y": -0.47 },
+ { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" },
+ { "time": 1, "x": 0, "y": 0 }
+ ]
+ },
+ "left foot": {
+ "rotate": [
+ { "time": 0, "angle": -14.56 },
+ { "time": 0.1333, "angle": -10.42 },
+ { "time": 0.2333, "angle": -5.01 },
+ { "time": 0.3, "angle": 6.67 },
+ { "time": 0.3666, "angle": 3.87 },
+ { "time": 0.5, "angle": -3.87 },
+ { "time": 0.6333, "angle": 2.78 },
+ { "time": 0.7333, "angle": -11.99 },
+ { "time": 0.8666, "angle": -12.45 },
+ { "time": 1, "angle": -14.56 }
+ ]
+ },
+ "right shoulder": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": 5.29,
+ "curve": [ 0.264, 0, 0.75, 1 ]
+ },
+ { "time": 0.6333, "angle": 6.65 },
+ { "time": 1, "angle": 5.29 }
+ ]
+ },
+ "right arm": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": -4.02,
+ "curve": [ 0.267, 0, 0.804, 0.99 ]
+ },
+ {
+ "time": 0.6333,
+ "angle": 19.78,
+ "curve": [ 0.307, 0, 0.787, 0.99 ]
+ },
+ { "time": 1, "angle": -4.02 }
+ ]
+ },
+ "right hand": {
+ "rotate": [
+ { "time": 0, "angle": 8.98 },
+ { "time": 0.6333, "angle": 0.51 },
+ { "time": 1, "angle": 8.98 }
+ ]
+ },
+ "left shoulder": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": 6.25,
+ "curve": [ 0.339, 0, 0.683, 1 ]
+ },
+ {
+ "time": 0.5,
+ "angle": -11.78,
+ "curve": [ 0.281, 0, 0.686, 0.99 ]
+ },
+ { "time": 1, "angle": 6.25 }
+ ],
+ "translate": [
+ { "time": 0, "x": 1.15, "y": 0.23 }
+ ]
+ },
+ "left hand": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": -21.23,
+ "curve": [ 0.295, 0, 0.755, 0.98 ]
+ },
+ {
+ "time": 0.5,
+ "angle": -27.28,
+ "curve": [ 0.241, 0, 0.75, 0.97 ]
+ },
+ { "time": 1, "angle": -21.23 }
+ ]
+ },
+ "left arm": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": 28.37,
+ "curve": [ 0.339, 0, 0.683, 1 ]
+ },
+ {
+ "time": 0.5,
+ "angle": 60.09,
+ "curve": [ 0.281, 0, 0.686, 0.99 ]
+ },
+ { "time": 1, "angle": 28.37 }
+ ]
+ },
+ "torso": {
+ "rotate": [
+ { "time": 0, "angle": -10.28 },
+ {
+ "time": 0.1333,
+ "angle": -15.38,
+ "curve": [ 0.545, 0, 0.818, 1 ]
+ },
+ {
+ "time": 0.3666,
+ "angle": -9.78,
+ "curve": [ 0.58, 0.17, 0.669, 0.99 ]
+ },
+ {
+ "time": 0.6333,
+ "angle": -15.75,
+ "curve": [ 0.235, 0.01, 0.795, 1 ]
+ },
+ {
+ "time": 0.8666,
+ "angle": -7.06,
+ "curve": [ 0.209, 0, 0.816, 0.98 ]
+ },
+ { "time": 1, "angle": -10.28 }
+ ],
+ "translate": [
+ { "time": 0, "x": -3.72, "y": -0.01 }
+ ]
+ },
+ "right foot": {
+ "rotate": [
+ { "time": 0, "angle": -5.25 },
+ { "time": 0.2333, "angle": -17.76 },
+ { "time": 0.3666, "angle": -20.09 },
+ { "time": 0.5, "angle": -19.73 },
+ { "time": 0.7333, "angle": -11.68 },
+ { "time": 0.8, "angle": 4.46 },
+ { "time": 0.8666, "angle": 0.46 },
+ { "time": 1, "angle": -5.25 }
+ ]
+ },
+ "right lower leg": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": -3.39,
+ "curve": [ 0.316, 0.01, 0.741, 0.98 ]
+ },
+ {
+ "time": 0.1333,
+ "angle": -43.21,
+ "curve": [ 0.414, 0, 0.705, 0.99 ]
+ },
+ { "time": 0.2333, "angle": -25.98 },
+ { "time": 0.5, "angle": -19.53 },
+ { "time": 0.6333, "angle": -64.8 },
+ {
+ "time": 0.7333,
+ "angle": -89.54,
+ "curve": [ 0.557, 0.18, 1, 1 ]
+ },
+ { "time": 1, "angle": -3.39 }
+ ],
+ "translate": [
+ { "time": 0, "x": 0, "y": 0, "curve": "stepped" },
+ { "time": 0.5, "x": 0, "y": 0 },
+ { "time": 0.6333, "x": 2.18, "y": 0.21 },
+ { "time": 1, "x": 0, "y": 0 }
+ ]
+ },
+ "hip": {
+ "rotate": [
+ { "time": 0, "angle": 0, "curve": "stepped" },
+ { "time": 1, "angle": 0 }
+ ],
+ "translate": [
+ { "time": 0, "x": 0, "y": -8.4 },
+ {
+ "time": 0.1333,
+ "x": 0,
+ "y": -9.35,
+ "curve": [ 0.326, 0.05, 0.674, 0.93 ]
+ },
+ {
+ "time": 0.2333,
+ "x": 0,
+ "y": -0.59,
+ "curve": [ 0.325, 0.39, 0.643, 0.7 ]
+ },
+ { "time": 0.3666, "x": 0, "y": -3.96 },
+ { "time": 0.5, "x": 0, "y": -8.4 },
+ {
+ "time": 0.6333,
+ "x": 0,
+ "y": -10,
+ "curve": [ 0.359, 0.47, 0.646, 0.74 ]
+ },
+ {
+ "time": 0.7333,
+ "x": 0,
+ "y": -5.29,
+ "curve": [ 0.333, 0.36, 0.662, 0.69 ]
+ },
+ {
+ "time": 0.8,
+ "x": 0,
+ "y": -2.49,
+ "curve": [ 0.322, 0.35, 0.651, 0.68 ]
+ },
+ { "time": 0.8666, "x": 0, "y": -3.96 },
+ { "time": 1, "x": 0, "y": -8.4 }
+ ]
+ },
+ "neck": {
+ "rotate": [
+ { "time": 0, "angle": 3.6 },
+ { "time": 0.1333, "angle": 17.49 },
+ { "time": 0.2333, "angle": 6.1 },
+ { "time": 0.3666, "angle": 3.45 },
+ { "time": 0.5, "angle": 5.17 },
+ { "time": 0.6333, "angle": 18.36 },
+ { "time": 0.7333, "angle": 6.09 },
+ { "time": 0.8666, "angle": 2.28 },
+ { "time": 1, "angle": 3.6 }
+ ]
+ },
+ "head": {
+ "rotate": [
+ {
+ "time": 0,
+ "angle": 3.6,
+ "curve": [ 0, 0, 0.704, 1.17 ]
+ },
+ { "time": 0.1333, "angle": -0.2 },
+ { "time": 0.2333, "angle": 6.1 },
+ { "time": 0.3666, "angle": 3.45 },
+ {
+ "time": 0.5,
+ "angle": 5.17,
+ "curve": [ 0, 0, 0.704, 1.61 ]
+ },
+ { "time": 0.6666, "angle": 1.1 },
+ { "time": 0.7333, "angle": 6.09 },
+ { "time": 0.8666, "angle": 2.28 },
+ { "time": 1, "angle": 3.6 }
+ ]
+ },
+ "pelvis": {
+ "rotate": [
+ { "time": 0, "angle": -1.33 }
+ ],
+ "translate": [
+ { "time": 0, "x": 0.39, "y": -0.78 }
+ ]
+ },
+ "spear1": {
+ "rotate": [
+ { "time": 0, "angle": 1.84 },
+ { "time": 0.2, "angle": -5.38 },
+ { "time": 0.5, "angle": 2.95 },
+ { "time": 0.7333, "angle": -3.67 },
+ { "time": 1, "angle": 1.84 }
+ ]
+ },
+ "spear2": {
+ "rotate": [
+ { "time": 0, "angle": 1.84 },
+ { "time": 0.2, "angle": -5.38 },
+ { "time": 0.5, "angle": 2.95 },
+ { "time": 0.7333, "angle": -3.67 },
+ { "time": 1, "angle": 1.84 }
+ ]
+ },
+ "spear3": {
+ "rotate": [
+ { "time": 0, "angle": 3.64 },
+ { "time": 0.2, "angle": -3.59 },
+ { "time": 0.5, "angle": 4.74 },
+ { "time": 0.7333, "angle": -1.87 },
+ { "time": 1, "angle": 3.64 }
+ ]
+ }
+ },
+ "ffd": {
+ "default": {
+ "right hand item": {
+ "dagger": [
+ {
+ "time": 0,
+ "offset": 26,
+ "vertices": [ 2.34, 0.14 ],
+ "curve": [ 0.25, 0, 0.75, 1 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 8,
+ "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ],
+ "curve": [ 0.25, 0, 0.75, 1 ]
+ },
+ {
+ "time": 1,
+ "offset": 26,
+ "vertices": [ 2.34, 0.14 ]
+ }
+ ]
+ }
+ },
+ "goblin": {
+ "head": {
+ "head": [
+ {
+ "time": 0,
+ "curve": [ 0.632, 0, 0.75, 1 ]
+ },
+ {
+ "time": 0.2,
+ "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ],
+ "curve": [ 0.25, 0, 0.75, 1 ]
+ },
+ {
+ "time": 0.3666,
+ "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ],
+ "curve": [ 0.621, 0, 0.75, 1 ]
+ },
+ {
+ "time": 0.7,
+ "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ],
+ "curve": [ 0.25, 0, 0.75, 1 ]
+ },
+ {
+ "time": 0.8666,
+ "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ],
+ "curve": [ 0.25, 0, 0.75, 1 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "left foot": {
+ "left foot": [
+ {
+ "time": 0,
+ "offset": 8,
+ "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ]
+ },
+ { "time": 0.1333 },
+ {
+ "time": 0.2333,
+ "offset": 8,
+ "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ]
+ },
+ {
+ "time": 0.3666,
+ "offset": 8,
+ "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ]
+ },
+ { "time": 0.5, "curve": "stepped" },
+ { "time": 0.6333 },
+ {
+ "time": 0.7333,
+ "offset": 8,
+ "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ]
+ },
+ {
+ "time": 0.8333,
+ "offset": 6,
+ "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ]
+ },
+ {
+ "time": 1,
+ "offset": 8,
+ "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ]
+ }
+ ]
+ },
+ "pelvis": {
+ "pelvis": [
+ { "time": 0 },
+ {
+ "time": 0.1333,
+ "offset": 6,
+ "vertices": [ -0.68, -4.13 ]
+ },
+ {
+ "time": 0.3333,
+ "offset": 6,
+ "vertices": [ -1.04, -3.1 ]
+ },
+ {
+ "time": 0.7,
+ "offset": 6,
+ "vertices": [ -1.42, -6.3 ]
+ },
+ {
+ "time": 0.8666,
+ "offset": 6,
+ "vertices": [ -1.13, -1.79 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right foot": {
+ "right foot": [
+ { "time": 0 },
+ {
+ "time": 0.1333,
+ "offset": 2,
+ "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ]
+ },
+ {
+ "time": 0.2333,
+ "offset": 2,
+ "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ]
+ },
+ {
+ "time": 0.3,
+ "offset": 2,
+ "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ]
+ },
+ {
+ "time": 0.3666,
+ "offset": 2,
+ "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 2,
+ "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ]
+ },
+ { "time": 0.6333 },
+ {
+ "time": 0.7333,
+ "offset": 4,
+ "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ]
+ },
+ {
+ "time": 0.8,
+ "offset": 4,
+ "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ]
+ },
+ { "time": 0.8666 }
+ ]
+ },
+ "right hand": {
+ "right hand": [
+ {
+ "time": 0,
+ "offset": 4,
+ "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ]
+ },
+ { "time": 0.5 },
+ {
+ "time": 1,
+ "offset": 4,
+ "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ]
+ }
+ ]
+ },
+ "right lower leg": {
+ "right lower leg": [
+ { "time": 0 },
+ {
+ "time": 0.6,
+ "offset": 6,
+ "vertices": [ 1.8, -1.56 ]
+ },
+ { "time": 1 }
+ ]
+ },
+ "right upper leg": {
+ "right upper leg": [
+ {
+ "time": 0,
+ "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ]
+ },
+ { "time": 0.3333 },
+ {
+ "time": 0.8666,
+ "offset": 14,
+ "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ]
+ },
+ {
+ "time": 1,
+ "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ]
+ }
+ ]
+ },
+ "torso": {
+ "torso": [
+ {
+ "time": 0,
+ "offset": 14,
+ "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 14,
+ "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ]
+ },
+ {
+ "time": 0.3,
+ "offset": 14,
+ "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ]
+ },
+ {
+ "time": 0.5,
+ "offset": 14,
+ "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ]
+ },
+ {
+ "time": 0.6333,
+ "offset": 14,
+ "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ]
+ },
+ {
+ "time": 0.8666,
+ "offset": 14,
+ "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ]
+ },
+ {
+ "time": 1,
+ "offset": 14,
+ "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ]
+ }
+ ]
+ },
+ "undie straps": {
+ "undie straps": [
+ {
+ "time": 0,
+ "offset": 2,
+ "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ]
+ },
+ {
+ "time": 0.1333,
+ "offset": 2,
+ "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ]
+ },
+ {
+ "time": 0.3333,
+ "offset": 2,
+ "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ]
+ },
+ {
+ "time": 0.7,
+ "offset": 2,
+ "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ]
+ },
+ {
+ "time": 0.8666,
+ "offset": 2,
+ "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ]
+ },
+ {
+ "time": 1,
+ "offset": 2,
+ "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ]
+ }
+ ]
+ },
+ "undies": {
+ "undies": [
+ {
+ "time": 0,
+ "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ]
+ },
+ {
+ "time": 0.1333,
+ "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ]
+ },
+ {
+ "time": 0.3333,
+ "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ]
+ },
+ {
+ "time": 0.5333,
+ "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ]
+ },
+ {
+ "time": 0.7,
+ "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ]
+ },
+ {
+ "time": 0.8333,
+ "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ]
+ },
+ {
+ "time": 0.8666,
+ "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ]
+ },
+ {
+ "time": 1,
+ "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ]
+ }
+ ]
+ }
+ }
+ }
+ }
+}
+}
\ No newline at end of file
diff --git a/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta
new file mode 100644
index 000000000..680370fa4
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/goblins-ffd.json.txt.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 03dfe4c9b91b93b47816439a1f91a48a
+TextScriptImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/goblins.unity b/spine-tk2d/Assets/examples/goblins/goblins.unity
new file mode 100644
index 000000000..816643e01
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/goblins.unity differ
diff --git a/spine-tk2d/Assets/examples/goblins/goblins.unity.meta b/spine-tk2d/Assets/examples/goblins/goblins.unity.meta
new file mode 100644
index 000000000..8d920a5d3
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/goblins.unity.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: cc2d822d0267e2e46bd5ee22ebc89b36
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images.meta b/spine-tk2d/Assets/examples/goblins/images.meta
new file mode 100644
index 000000000..4e2133603
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 4b989f3dd92ba6d46b9f473be0ef27fc
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/dagger.png b/spine-tk2d/Assets/examples/goblins/images/dagger.png
new file mode 100644
index 000000000..9a666d631
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/dagger.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta b/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta
new file mode 100644
index 000000000..defa4e75a
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/dagger.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: cff16cdb2ad3d54478e6d12afd6f835c
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin.meta b/spine-tk2d/Assets/examples/goblins/images/goblin.meta
new file mode 100644
index 000000000..9c6edceca
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 5ec67732682a81943a13b2dfd7b316d1
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png
new file mode 100644
index 000000000..e306dd40f
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta
new file mode 100644
index 000000000..700d6c794
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/eyes-closed.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 2f9da4d291a7421488b5d8c4c33fc5b4
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/head.png b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png
new file mode 100644
index 000000000..81c1b5e1b
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta
new file mode 100644
index 000000000..9ae734efd
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/head.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: bcce48841f8498e49876846c151dc4d7
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png
new file mode 100644
index 000000000..42f60e0aa
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta
new file mode 100644
index 000000000..68c269c84
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-arm.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: cf0aa5059c48db64380b5d8d9d48bbf7
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png
new file mode 100644
index 000000000..89c142b7c
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta
new file mode 100644
index 000000000..f6ba394a8
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-foot.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 14451be1ccd40764e9be7944b1b35d7e
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png
new file mode 100644
index 000000000..39700f014
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta
new file mode 100644
index 000000000..6eaa71a39
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-hand.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 2f39487177b6d0f429497745e64e1db0
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png
new file mode 100644
index 000000000..dd3e83b67
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta
new file mode 100644
index 000000000..b4be08c2f
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-lower-leg.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: d875337f331493b448affcae727ab7b0
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png
new file mode 100644
index 000000000..220b09cbf
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta
new file mode 100644
index 000000000..f5255ab88
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-shoulder.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 6c0265e742cac734e86738c88cac3187
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png
new file mode 100644
index 000000000..a031cf682
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta
new file mode 100644
index 000000000..cf0fb0e1e
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/left-upper-leg.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 30edd05fdf3f3ec4897c5f095cfba8f9
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png
new file mode 100644
index 000000000..f4f3f04dc
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta
new file mode 100644
index 000000000..026b96f68
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/neck.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 946e1ac49a597d642940d2bc61a74ceb
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png
new file mode 100644
index 000000000..a8fc15c0d
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta
new file mode 100644
index 000000000..5989ae20d
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/pelvis.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 34721831e8dc33048a1c642af9c91860
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png
new file mode 100644
index 000000000..c7b752bb2
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta
new file mode 100644
index 000000000..c98922722
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-arm.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 0fc0421ba4507d7479276646539febf7
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png
new file mode 100644
index 000000000..ce982d310
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta
new file mode 100644
index 000000000..8e4e299ef
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-foot.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 232f1d4aee7e76547b4a3349b7fd4f29
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png
new file mode 100644
index 000000000..2363fba02
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta
new file mode 100644
index 000000000..dec41eb80
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-hand.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: e89eca7d89b489f4491b5ec1cbb3ddf7
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png
new file mode 100644
index 000000000..b9bb49654
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta
new file mode 100644
index 000000000..f5cca1a75
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-lower-leg.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: aab7b79018a3ec84baccbeb6d9c40554
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png
new file mode 100644
index 000000000..48baa266c
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta
new file mode 100644
index 000000000..64eabbccc
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-shoulder.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: d0937186e72f856419c9dbcaec82762d
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png
new file mode 100644
index 000000000..d5fac4424
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta
new file mode 100644
index 000000000..a5298629c
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/right-upper-leg.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 438e00f2d68cac24bace724555e443b5
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png
new file mode 100644
index 000000000..f9b4314ae
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta
new file mode 100644
index 000000000..56d9f6e3b
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/torso.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 9427b1a031010ab41b9cda104be8c204
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png
new file mode 100644
index 000000000..6088d3544
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta
new file mode 100644
index 000000000..eca91be55
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/undie-straps.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 9cfb974ed9f3dd042895ccfe0e2461b1
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png
new file mode 100644
index 000000000..95016babd
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta
new file mode 100644
index 000000000..de460e4e0
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblin/undies.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 10fccc8bd5aead04ca7376a040205f6f
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta b/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta
new file mode 100644
index 000000000..6d452d669
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/goblingirl.meta
@@ -0,0 +1,5 @@
+fileFormatVersion: 2
+guid: 1c61c40d4513f844b9c4bb7bfb8992a6
+folderAsset: yes
+DefaultImporter:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/shield.png b/spine-tk2d/Assets/examples/goblins/images/shield.png
new file mode 100644
index 000000000..de431217c
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/shield.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/shield.png.meta b/spine-tk2d/Assets/examples/goblins/images/shield.png.meta
new file mode 100644
index 000000000..4b45b9fed
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/shield.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 95c2d261ccd8d8c4b8760693cba0e08a
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/goblins/images/spear.png b/spine-tk2d/Assets/examples/goblins/images/spear.png
new file mode 100644
index 000000000..0704dc326
Binary files /dev/null and b/spine-tk2d/Assets/examples/goblins/images/spear.png differ
diff --git a/spine-tk2d/Assets/examples/goblins/images/spear.png.meta b/spine-tk2d/Assets/examples/goblins/images/spear.png.meta
new file mode 100644
index 000000000..b14274471
--- /dev/null
+++ b/spine-tk2d/Assets/examples/goblins/images/spear.png.meta
@@ -0,0 +1,45 @@
+fileFormatVersion: 2
+guid: 54e7cc7562d107b4d96e0422dc7ed587
+TextureImporter:
+ serializedVersion: 2
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ linearTexture: 0
+ correctGamma: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: .25
+ normalMapFilter: 0
+ isReadable: 1
+ grayScaleToAlpha: 0
+ generateCubemap: 0
+ seamlessCubemap: 0
+ textureFormat: -3
+ maxTextureSize: 4096
+ textureSettings:
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapMode: -1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: .5, y: .5}
+ spritePixelsToUnits: 100
+ alphaIsTransparency: 1
+ textureType: 5
+ buildTargetSettings: []
+ spriteSheet:
+ sprites: []
+ spritePackingTag:
+ userData:
diff --git a/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset
index bd6d5fa87..e93322ba0 100644
Binary files a/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset and b/spine-tk2d/Assets/examples/spineboy/Spineboy SkeletonData.asset differ
diff --git a/spine-tk2d/Assets/examples/spineboy/Spineboy.cs b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs
index 2ca754fab..615b0e4e0 100644
--- a/spine-tk2d/Assets/examples/spineboy/Spineboy.cs
+++ b/spine-tk2d/Assets/examples/spineboy/Spineboy.cs
@@ -41,8 +41,8 @@ public class Spineboy : MonoBehaviour {
skeletonAnimation = GetComponent();
// Call our method any time an animation fires an event.
skeletonAnimation.state.Event += Event;
- // Queue jump to be played on track 0 after the starting animation.
- skeletonAnimation.state.AddAnimation(0, "jump", false, 0);
+ // Queue jump to be played on track 0 three seconds after the starting animation.
+ skeletonAnimation.state.AddAnimation(0, "jump", false, 3);
// Queue walk to be looped on track 0 after the jump animation.
skeletonAnimation.state.AddAnimation(0, "run", true, 0);
}
diff --git a/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt
index a673cd0f8..1ffa7aad5 100644
--- a/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt
+++ b/spine-tk2d/Assets/examples/spineboy/spineboy.json.txt
@@ -1815,55 +1815,55 @@
"slots": {
"front_fist": {
"attachment": [
- { "time": 0, "name": "front_fist_closed" },
- { "time": 0.2666, "name": "front_fist_open" }
+ { "time": 0.1333, "name": "front_fist_closed" },
+ { "time": 0.4, "name": "front_fist_open" }
]
},
"mouth": {
"attachment": [
- { "time": 0, "name": "mouth_grind" }
+ { "time": 0.1333, "name": "mouth_grind" }
]
},
"muzzle": {
"attachment": [
- { "time": 0, "name": "muzzle" },
- { "time": 0.1333, "name": null }
+ { "time": 0.1333, "name": "muzzle" },
+ { "time": 0.2666, "name": null }
],
"color": [
{
- "time": 0,
+ "time": 0.1333,
"color": "ffffff00",
"curve": [ 0.118, 0.99, 0.75, 1 ]
},
{
- "time": 0.0333,
+ "time": 0.1666,
"color": "ffffffff",
"curve": [ 0.821, 0, 0.909, 0.89 ]
},
- { "time": 0.1333, "color": "ffffff00" }
+ { "time": 0.2666, "color": "ffffff00" }
]
}
},
"bones": {
"front_fist": {
"scale": [
- { "time": 0, "x": 1, "y": 1, "curve": "stepped" },
- { "time": 0.2666, "x": 1, "y": 1 }
+ { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" },
+ { "time": 0.4, "x": 1, "y": 1 }
]
},
"gunTip": {
"translate": [
- { "time": 0, "x": 0, "y": 0 },
- { "time": 0.0666, "x": 20.93, "y": 1.57 }
+ { "time": 0.1333, "x": 0, "y": 0 },
+ { "time": 0.2, "x": 20.93, "y": 1.57 }
],
"scale": [
- { "time": 0, "x": 1, "y": 1 },
- { "time": 0.0666, "x": 1.247, "y": 1.516 }
+ { "time": 0.1333, "x": 1, "y": 1 },
+ { "time": 0.2, "x": 1.247, "y": 1.516 }
]
},
"gun": {
"rotate": [
- { "time": 0, "angle": 0 }
+ { "time": 0, "angle": 1.9 }
],
"translate": [
{
@@ -1872,13 +1872,13 @@
"y": 5.84,
"curve": [ 0, 0.3, 0.678, 1 ]
},
- { "time": 0.1666, "x": -9.3, "y": -1.41 },
- { "time": 0.2666, "x": 0, "y": 0 }
+ { "time": 0.3, "x": -9.3, "y": -1.41 },
+ { "time": 0.4, "x": 0, "y": 0 }
]
},
"rear_bracer": {
"rotate": [
- { "time": 0, "angle": 0 }
+ { "time": 0, "angle": -30.47 }
],
"translate": [
{
@@ -1887,13 +1887,13 @@
"y": 0,
"curve": [ 0, 0.3, 0.678, 1 ]
},
- { "time": 0.1666, "x": -5.99, "y": -3.71 },
- { "time": 0.2666, "x": 0, "y": 0 }
+ { "time": 0.3, "x": -5.99, "y": -3.71 },
+ { "time": 0.4, "x": 0, "y": 0 }
]
},
"rear_upper_arm": {
"rotate": [
- { "time": 0, "angle": 0 }
+ { "time": 0, "angle": 62.3 }
],
"translate": [
{
@@ -1902,8 +1902,8 @@
"y": 0,
"curve": [ 0, 0.3, 0.678, 1 ]
},
- { "time": 0.1666, "x": 2.81, "y": 11.41 },
- { "time": 0.2666, "x": 0, "y": 0 }
+ { "time": 0.3, "x": 2.81, "y": 11.41 },
+ { "time": 0.4, "x": 0, "y": 0 }
]
}
}
diff --git a/spine-tk2d/Assets/examples/spineboy/spineboy.unity b/spine-tk2d/Assets/examples/spineboy/spineboy.unity
index 14bfa345c..49906cadd 100644
Binary files a/spine-tk2d/Assets/examples/spineboy/spineboy.unity and b/spine-tk2d/Assets/examples/spineboy/spineboy.unity differ