Merge pull request #1929 from vhristov/timeline_dont_pause_with_director

[unity] Add option to not pause spine with timeline
This commit is contained in:
Harald Csaszar 2021-07-22 16:57:47 +02:00 committed by GitHub
commit 78c8c54ab7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 3 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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);