From 6bf587057f56404b226980769b0c07766dcee9dd Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 1 Jun 2022 19:35:18 +0200 Subject: [PATCH 1/2] [unity] Fixed Timeline SkeletonGraphic clip exception when DefaultMixDuration is disabled. Closes #2090. Same bugfix as in commit d796131 on 4.1-beta branch. --- .../SpineAnimationStateGraphicTrack.cs | 8 ++++++++ .../package-no-spine-unity-dependency.json | 2 +- .../com.esotericsoftware.spine.timeline/package.json | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs index 1c16f2f94..535110dd0 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateGraphicTrack.cs @@ -30,6 +30,7 @@ #if UNITY_EDITOR using System.ComponentModel; #endif +using System.Collections.Generic; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -45,6 +46,13 @@ namespace Spine.Unity.Playables { public int trackIndex = 0; public override Playable CreateTrackMixer (PlayableGraph graph, GameObject go, int inputCount) { + IEnumerable clips = this.GetClips(); + foreach (TimelineClip clip in clips) { + var animationStateClip = clip.asset as SpineAnimationStateClip; + if (animationStateClip != null) + animationStateClip.timelineClip = clip; + } + var scriptPlayable = ScriptPlayable.Create(graph, inputCount); var mixerBehaviour = scriptPlayable.GetBehaviour(); mixerBehaviour.trackIndex = this.trackIndex; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json index 2d6284d2c..9781f3752 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package-no-spine-unity-dependency.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.timeline", "displayName": "Spine Timeline Extensions", "description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime (via the spine-unity unitypackage), version 4.0.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.0.10", + "version": "4.0.11", "unity": "2018.3", "author": { "name": "Esoteric Software", diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json index 60146b620..8be2cf592 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.timeline", "displayName": "Spine Timeline Extensions", "description": "This plugin provides integration of spine-unity for the Unity Timeline.\n\nPrerequisites:\nIt requires a working installation of the spine-unity and spine-csharp runtimes as UPM packages (not as spine-unity unitypackage), version 4.0.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.0.10", + "version": "4.0.11", "unity": "2018.3", "author": { "name": "Esoteric Software", From 0c286734a7274b63ac07c9f494a2260b6e188819 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 9 Jun 2022 18:07:15 +0200 Subject: [PATCH 2/2] [unity] Fixed build crashing on Unity 2022.1.3 on PostprocessSpinePrefabMeshes() calling AssetDatabase.SaveAssets(). Closes #2093. --- .../Editor/Utility/SpineBuildProcessor.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs index 6b994b4cd..12d836ea5 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs @@ -36,6 +36,10 @@ #define HAS_ON_POSTPROCESS_PREFAB #endif +#if UNITY_2020_3_OR_NEWER +#define HAS_SAVE_ASSET_IF_DIRTY +#endif + using System.Collections.Generic; using UnityEditor; using UnityEditor.Build; @@ -80,13 +84,18 @@ namespace Spine.Unity.Editor { string assetPath = AssetDatabase.GUIDToAssetPath(asset); GameObject prefabGameObject = AssetDatabase.LoadAssetAtPath(assetPath); if (SpineEditorUtilities.CleanupSpinePrefabMesh(prefabGameObject)) { +#if HAS_SAVE_ASSET_IF_DIRTY + AssetDatabase.SaveAssetIfDirty(prefabGameObject); +#endif prefabsToRestore.Add(assetPath); } EditorUtility.UnloadUnusedAssetsImmediate(); } AssetDatabase.StopAssetEditing(); +#if !HAS_SAVE_ASSET_IF_DIRTY if (prefabAssets.Length > 0) AssetDatabase.SaveAssets(); +#endif } finally { BuildUtilities.IsInSkeletonAssetBuildPreProcessing = false; } @@ -98,9 +107,14 @@ namespace Spine.Unity.Editor { foreach (string assetPath in prefabsToRestore) { GameObject g = AssetDatabase.LoadAssetAtPath(assetPath); SpineEditorUtilities.SetupSpinePrefabMesh(g, null); +#if HAS_SAVE_ASSET_IF_DIRTY + AssetDatabase.SaveAssetIfDirty(g); +#endif } +#if !HAS_SAVE_ASSET_IF_DIRTY if (prefabsToRestore.Count > 0) AssetDatabase.SaveAssets(); +#endif prefabsToRestore.Clear(); } finally { @@ -121,11 +135,16 @@ namespace Spine.Unity.Editor { spriteAtlasTexturesToRestore[assetPath] = AssetDatabase.GetAssetPath(atlasAsset.materials[0].mainTexture); atlasAsset.materials[0].mainTexture = null; } +#if HAS_SAVE_ASSET_IF_DIRTY + AssetDatabase.SaveAssetIfDirty(atlasAsset); +#endif EditorUtility.UnloadUnusedAssetsImmediate(); } AssetDatabase.StopAssetEditing(); +#if !HAS_SAVE_ASSET_IF_DIRTY if (spriteAtlasAssets.Length > 0) AssetDatabase.SaveAssets(); +#endif } finally { BuildUtilities.IsInSpriteAtlasBuildPreProcessing = false; } @@ -141,9 +160,14 @@ namespace Spine.Unity.Editor { Texture atlasTexture = AssetDatabase.LoadAssetAtPath(pair.Value); atlasAsset.materials[0].mainTexture = atlasTexture; } +#if HAS_SAVE_ASSET_IF_DIRTY + AssetDatabase.SaveAssetIfDirty(atlasAsset); +#endif } +#if !HAS_SAVE_ASSET_IF_DIRTY if (spriteAtlasTexturesToRestore.Count > 0) AssetDatabase.SaveAssets(); +#endif spriteAtlasTexturesToRestore.Clear(); } finally { BuildUtilities.IsInSpriteAtlasBuildPostProcessing = false;