浏览代码

Merge pull request #1929 from vhristov/timeline_dont_pause_with_director

[unity] Add option to not pause spine with timeline
Harald Csaszar 4 年之前
父节点
当前提交
78c8c54ab7

+ 4 - 0
spine-unity/Modules/com.esotericsoftware.spine.timeline/Editor/SpineAnimationStateDrawer.cs

@@ -50,6 +50,7 @@ public class SpineAnimationStateDrawer : PropertyDrawer {
 		SerializedProperty useBlendDurationProp = property.FindPropertyRelative("useBlendDuration");
 		SerializedProperty mixDurationProp = property.FindPropertyRelative("mixDuration");
 		SerializedProperty holdPreviousProp = property.FindPropertyRelative("holdPrevious");
+		SerializedProperty dontPauseWithDirectorProp = property.FindPropertyRelative("dontPauseWithDirector");
 		SerializedProperty eventProp = property.FindPropertyRelative("eventThreshold");
 		SerializedProperty attachmentProp = property.FindPropertyRelative("attachmentThreshold");
 		SerializedProperty drawOrderProp = property.FindPropertyRelative("drawOrderThreshold");
@@ -91,6 +92,9 @@ public class SpineAnimationStateDrawer : PropertyDrawer {
 		singleFieldRect.y += lineHeightWithSpacing;
 		EditorGUI.PropertyField(singleFieldRect, holdPreviousProp);
 
+		singleFieldRect.y += lineHeightWithSpacing;
+		EditorGUI.PropertyField(singleFieldRect, dontPauseWithDirectorProp);
+
 		singleFieldRect.y += lineHeightWithSpacing;
 		EditorGUI.PropertyField(singleFieldRect, eventProp);
 

+ 1 - 0
spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateBehaviour.cs

@@ -53,6 +53,7 @@ namespace Spine.Unity.Playables {
 		#pragma warning restore 414
 		public float mixDuration = 0.1f;
 		public bool holdPrevious = false;
+		public bool dontPauseWithDirector = false;
 
 		[Range(0, 1f)]
 		public float attachmentThreshold = 0.5f;

+ 8 - 3
spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs

@@ -41,14 +41,17 @@ namespace Spine.Unity.Playables {
 		public int trackIndex;
 
 		IAnimationStateComponent animationStateComponent;
+		bool dontPauseWithDirector = true;
 		bool isPaused = false;
 		TrackEntry pausedTrackEntry;
 		float previousTimeScale = 1;
 
 		public override void OnBehaviourPause (Playable playable, FrameData info) {
-			if (!isPaused)
-				HandlePause(playable);
-			isPaused = true;
+			if (!dontPauseWithDirector) {
+				if (!isPaused)
+					HandlePause(playable);
+				isPaused = true;
+			}
 		}
 
 		public override void OnBehaviourPlay (Playable playable, FrameData info) {
@@ -119,6 +122,8 @@ namespace Spine.Unity.Playables {
 					ScriptPlayable<SpineAnimationStateBehaviour> inputPlayable = (ScriptPlayable<SpineAnimationStateBehaviour>)playable.GetInput(i);
 					SpineAnimationStateBehaviour clipData = inputPlayable.GetBehaviour();
 
+					dontPauseWithDirector = clipData.dontPauseWithDirector;
+
 					if (clipData.animationReference == null) {
 						float mixDuration = clipData.customDuration ? clipData.mixDuration : state.Data.DefaultMix;
 						state.SetEmptyAnimation(trackIndex, mixDuration);