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 f176ddd32..84331a972 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.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.1", + "version": "4.1.2", "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 96bddef15..2b7f031d0 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.1.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)", - "version": "4.1.1", + "version": "4.1.2", "unity": "2018.3", "author": { "name": "Esoteric Software",