From ed407316845099a6914cfc2bb53fb6672f3ebe80 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Mon, 27 Jan 2020 12:02:16 +0100 Subject: [PATCH] [unity] Fixed unnecessary additional GC allocation of JSON deserializer in Editor (always caused allocation for version check). Closes #1608. --- .../Asset Types/SkeletonDataAsset.cs | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs index b18e0f417..f642b10a6 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs @@ -114,7 +114,7 @@ namespace Spine.Unity { Clear(); return null; } - + // Disabled to support attachmentless/skinless SkeletonData. // if (atlasAssets == null) { // atlasAssets = new AtlasAsset[0]; @@ -161,10 +161,20 @@ namespace Spine.Unity { #endif bool isBinary = skeletonJSON.name.ToLower().Contains(".skel"); - SkeletonData loadedSkeletonData; + SkeletonData loadedSkeletonData = null; + + try { + if (isBinary) + loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, skeletonDataScale); + else + loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.text, attachmentLoader, skeletonDataScale); + } catch (Exception ex) { + if (!quiet) + Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this); + } #if UNITY_EDITOR - if (skeletonJSON) { + if (loadedSkeletonData == null && !quiet && skeletonJSON != null) { SkeletonDataCompatibility.VersionInfo fileVersion = SkeletonDataCompatibility.GetVersionInfo(skeletonJSON); CompatibilityProblemInfo compatibilityProblemInfo = SkeletonDataCompatibility.GetCompatibilityProblemInfo(fileVersion); if (compatibilityProblemInfo != null) { @@ -173,20 +183,9 @@ namespace Spine.Unity { } } #endif - - try { - if (isBinary) - loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.bytes, attachmentLoader, skeletonDataScale); - else - loadedSkeletonData = SkeletonDataAsset.ReadSkeletonData(skeletonJSON.text, attachmentLoader, skeletonDataScale); - - } catch (Exception ex) { - if (!quiet) - Debug.LogError("Error reading skeleton JSON file for SkeletonData asset: " + name + "\n" + ex.Message + "\n" + ex.StackTrace, this); + if (loadedSkeletonData == null) return null; - } - if (skeletonDataModifiers != null) { foreach (var m in skeletonDataModifiers) { if (m != null) m.Apply(loadedSkeletonData);