From 7db783c660ffb78b9a877e3301e58ba83101e61a Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Mon, 29 Nov 2021 19:36:48 +0100 Subject: [PATCH] [unity] Timeline: Added editor warning when SpineAnimationStateTrack 'Track Index' is identical to target 'Track Index' of other track. --- .../SpineAnimationStateTrack.cs | 30 +++++++++++++++++++ .../package-no-spine-unity-dependency.json | 2 +- .../package.json | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs index 502234ee9..5c69f6637 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateTrack.cs @@ -48,9 +48,39 @@ namespace Spine.Unity.Playables { } var scriptPlayable = ScriptPlayable.Create(graph, inputCount); +#if UNITY_EDITOR + WarnIfDuplicateTrackIndex(); +#endif var mixerBehaviour = scriptPlayable.GetBehaviour(); mixerBehaviour.trackIndex = this.trackIndex; return scriptPlayable; } + +#if UNITY_EDITOR + static float lastWarningTime = 0; + + public void WarnIfDuplicateTrackIndex () { + if (Time.frameCount == lastWarningTime) // only warn once. + return; + lastWarningTime = Time.frameCount; + + var rootTracks = timelineAsset.GetRootTracks(); + List trackIndices = new List(); + int trackFromTop = -1; // first invisible track is marker track, skipped. + foreach (var track in rootTracks) { + ++trackFromTop; + if (track.GetType() != typeof(SpineAnimationStateTrack)) + continue; + var animationStateTrack = (SpineAnimationStateTrack)track; + int trackIndex = animationStateTrack.trackIndex; + if (trackIndices.Contains(trackIndex)) { + Debug.LogWarning(string.Format("Please change the 'Track Index' Inspector property " + + "at Track number {0} from the top, both tracks are setting animations at track index '{1}'.", + trackFromTop, trackIndex)); + } else + trackIndices.Add(trackIndex); + } + } +#endif } } 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 cb40ec56c..8079b457e 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.7", + "version": "4.0.8", "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 c306bc425..bdec75d66 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.7", + "version": "4.0.8", "unity": "2018.3", "author": { "name": "Esoteric Software",