From 9791d3a0d5f5a4d65cbb85eef55b52b37f7cd61c Mon Sep 17 00:00:00 2001 From: pharan Date: Fri, 20 Jul 2018 02:56:15 +0800 Subject: [PATCH 1/3] [unity] Docs/ handling for SkeletonGraphicMirror. --- .../SkeletonGraphic/SkeletonGraphicMirror.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs index 9677c1985..8fa89962b 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphicMirror.cs @@ -1,4 +1,4 @@ -/****************************************************************************** +/****************************************************************************** * Spine Runtimes Software License v2.5 * * Copyright (c) 2013-2016, Esoteric Software @@ -60,14 +60,17 @@ namespace Spine.Unity.Modules { if (restoreOnDisable) RestoreIndependentSkeleton(); } + /// Freeze the SkeletonGraphic on this GameObject, and use the source as the Skeleton to be rendered by the SkeletonGraphic. public void StartMirroring () { if (source == null) return; if (skeletonGraphic == null) return; skeletonGraphic.startingAnimation = string.Empty; - originalSkeleton = skeletonGraphic.Skeleton; - originalFreeze = skeletonGraphic.freeze; + if (originalSkeleton == null) { + originalSkeleton = skeletonGraphic.Skeleton; + originalFreeze = skeletonGraphic.freeze; + } skeletonGraphic.Skeleton = source.skeleton; skeletonGraphic.freeze = true; @@ -75,16 +78,23 @@ namespace Spine.Unity.Modules { skeletonGraphic.OverrideTexture = overrideTexture; } + /// Use a new texture for the SkeletonGraphic. Use this if your source skeleton uses a repacked atlas. public void UpdateTexture (Texture2D newOverrideTexture) { overrideTexture = newOverrideTexture; if (newOverrideTexture != null) skeletonGraphic.OverrideTexture = overrideTexture; } + /// Stops mirroring the source SkeletonRenderer and allows the SkeletonGraphic to become an independent Skeleton component again. public void RestoreIndependentSkeleton () { + if (originalSkeleton == null) + return; + skeletonGraphic.Skeleton = originalSkeleton; skeletonGraphic.freeze = originalFreeze; skeletonGraphic.OverrideTexture = null; + + originalSkeleton = null; } } From 3b750c2612e93c328b50d22b03805b9109299877 Mon Sep 17 00:00:00 2001 From: pharan Date: Fri, 20 Jul 2018 03:16:28 +0800 Subject: [PATCH 2/3] [unity] Fix new folders AnimationReferenceAsset. --- .../Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs index aa5a4b809..682adbb05 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs @@ -229,8 +229,8 @@ namespace Spine.Unity.Editor { void CreateAnimationReferenceAssets () { const string AssetFolderName = "ReferenceAssets"; - string parentFolder = AssetDatabase.GetAssetPath(targetSkeletonDataAsset); - string dataPath = System.IO.Path.GetDirectoryName(parentFolder) + "/" + AssetFolderName; + string parentFolder = System.IO.Path.GetDirectoryName(AssetDatabase.GetAssetPath(targetSkeletonDataAsset)); + string dataPath = parentFolder + "/" + AssetFolderName; if (!AssetDatabase.IsValidFolder(dataPath)) { AssetDatabase.CreateFolder(parentFolder, AssetFolderName); } From 9a428a02b8155fc016fb70e92ec83331ecfec149 Mon Sep 17 00:00:00 2001 From: badlogic Date: Thu, 9 Aug 2018 14:59:09 +0200 Subject: [PATCH 3/3] [c] Fixes #1148, revert changes to spVertexAttachment_computeWorldVertices. Vertex size must be a multiple of 4, which explains why #1148 failed. --- spine-c/spine-c/src/spine/VertexAttachment.c | 2 +- spine-cocos2dx/src/spine/SkeletonRenderer.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spine-c/spine-c/src/spine/VertexAttachment.c b/spine-c/spine-c/src/spine/VertexAttachment.c index 14087815e..8b6dfea36 100644 --- a/spine-c/spine-c/src/spine/VertexAttachment.c +++ b/spine-c/spine-c/src/spine/VertexAttachment.c @@ -51,7 +51,7 @@ void spVertexAttachment_computeWorldVertices (spVertexAttachment* self, spSlot* float* vertices; int* bones; - count = offset + (count >> 1) * stride; + count += offset; skeleton = slot->bone->skeleton; deformLength = slot->attachmentVerticesCount; deform = slot->attachmentVertices; diff --git a/spine-cocos2dx/src/spine/SkeletonRenderer.cpp b/spine-cocos2dx/src/spine/SkeletonRenderer.cpp index 8fac0f5ed..2fd87e351 100644 --- a/spine-cocos2dx/src/spine/SkeletonRenderer.cpp +++ b/spine-cocos2dx/src/spine/SkeletonRenderer.cpp @@ -344,7 +344,8 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t triangles.verts = batch->allocateVertices(attachmentVertices->_triangles->vertCount); triangles.vertCount = attachmentVertices->_triangles->vertCount; memcpy(triangles.verts, attachmentVertices->_triangles->verts, sizeof(cocos2d::V3F_C4B_T2F) * attachmentVertices->_triangles->vertCount); - spVertexAttachment_computeWorldVertices(SUPER(attachment), slot, 0, triangles.vertCount * sizeof(cocos2d::V3F_C4B_T2F) / 4, (float*)triangles.verts, 0, 6); + int vertexSizeInFloats = sizeof(cocos2d::V3F_C4B_T2F) / sizeof(float); + spVertexAttachment_computeWorldVertices(SUPER(attachment), slot, 0, triangles.vertCount * vertexSizeInFloats, (float*)triangles.verts, 0, vertexSizeInFloats); } else { trianglesTwoColor.indices = attachmentVertices->_triangles->indices; trianglesTwoColor.indexCount = attachmentVertices->_triangles->indexCount; @@ -353,7 +354,8 @@ void SkeletonRenderer::draw (Renderer* renderer, const Mat4& transform, uint32_t for (int i = 0; i < trianglesTwoColor.vertCount; i++) { trianglesTwoColor.verts[i].texCoords = attachmentVertices->_triangles->verts[i].texCoords; } - spVertexAttachment_computeWorldVertices(SUPER(attachment), slot, 0, trianglesTwoColor.vertCount * sizeof(V3F_C4B_C4B_T2F) / 4, (float*)trianglesTwoColor.verts, 0, 7); + int vertexSizeInFloats = sizeof(V3F_C4B_C4B_T2F) / sizeof(float); + spVertexAttachment_computeWorldVertices(SUPER(attachment), slot, 0, trianglesTwoColor.vertCount * vertexSizeInFloats, (float*)trianglesTwoColor.verts, 0, vertexSizeInFloats); } color.r = attachment->color.r;