From 9550e9e6bc6c8d102ae5008089af300e7868130d Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Fri, 6 Dec 2019 15:23:14 +0100 Subject: [PATCH 1/2] [unity] Fixed Prefab Inspector constantly reloading in Unity 2019.3. Closes #1387. --- .../Components/SkeletonRenderer.cs | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index 3d01e27e1..a12c80262 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -297,12 +297,8 @@ namespace Spine.Unity { // Clear { - if (meshFilter != null) - meshFilter.sharedMesh = null; - - meshRenderer = GetComponent(); - if (meshRenderer != null && meshRenderer.enabled) meshRenderer.sharedMaterial = null; - + // Note: do not reset meshFilter.sharedMesh or meshRenderer.sharedMaterial to null, + // otherwise constant reloading will be triggered at prefabs. currentInstructions.Clear(); rendererBuffers.Clear(); meshGenerator.Begin(); @@ -352,6 +348,15 @@ namespace Spine.Unity { public virtual void LateUpdate () { if (!valid) return; + #if UNITY_EDITOR && NEW_PREFAB_SYSTEM + // Don't store mesh or material at the prefab, otherwise it will permanently reload + var prefabType = UnityEditor.PrefabUtility.GetPrefabAssetType(this); + if (!UnityEditor.PrefabUtility.IsPartOfPrefabInstance(this) && + (prefabType == UnityEditor.PrefabAssetType.Regular || prefabType == UnityEditor.PrefabAssetType.Variant)) { + return; + } + #endif + #if SPINE_OPTIONAL_RENDEROVERRIDE bool doMeshOverride = generateMeshOverride != null; if ((!meshRenderer.enabled) && !doMeshOverride) return; @@ -397,17 +402,17 @@ namespace Spine.Unity { MeshGenerator.GenerateSkeletonRendererInstruction(currentInstructions, skeleton, customSlotMaterials, separatorSlots, doMeshOverride, this.immutableTriangles); // STEP 1.9. Post-process workingInstructions. ================================================================================== - #if SPINE_OPTIONAL_MATERIALOVERRIDE +#if SPINE_OPTIONAL_MATERIALOVERRIDE if (customMaterialOverride.Count > 0) // isCustomMaterialOverridePopulated MeshGenerator.TryReplaceMaterials(workingSubmeshInstructions, customMaterialOverride); - #endif +#endif - #if SPINE_OPTIONAL_RENDEROVERRIDE +#if SPINE_OPTIONAL_RENDEROVERRIDE if (doMeshOverride) { this.generateMeshOverride(currentInstructions); if (disableRenderingOnOverride) return; } - #endif +#endif updateTriangles = SkeletonRendererInstruction.GeometryNotEqual(currentInstructions, currentSmartMesh.instructionUsed); @@ -444,7 +449,7 @@ namespace Spine.Unity { } if (materialsChanged && (this.maskMaterials.AnyMaterialCreated)) { this.maskMaterials = new SpriteMaskInteractionMaterials(); - } + } meshGenerator.FillLateVertexData(currentMesh); From 6568c5d64e33b82ffd5d9eac462425f1565b6a2b Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 11 Dec 2019 18:00:51 +0100 Subject: [PATCH 2/2] Fixed JsonRollback when a skin has no attachments. --- .../src/com/esotericsoftware/spine/JsonRollback.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java index 9a4fe0412..5a17e0aac 100644 --- a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java @@ -115,8 +115,10 @@ public class JsonRollback { JsonValue skins = root.get("skins"); if (skins != null && skins.isArray()) { JsonValue newSkins = new JsonValue(ValueType.object); - for (JsonValue skinMap = skins.child; skinMap != null; skinMap = skinMap.next) - newSkins.addChild(skinMap.getString("name"), skinMap.get("attachments")); + for (JsonValue skinMap = skins.child; skinMap != null; skinMap = skinMap.next) { + JsonValue attachments = skinMap.get("attachments"); + if (attachments != null) newSkins.addChild(skinMap.getString("name"), skinMap.get("attachments")); + } root.remove("skins"); root.addChild("skins", newSkins); }