diff --git a/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs b/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs index 1bb0b41b0..b82efe24c 100644 --- a/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs +++ b/Assets/Scripts/SceneManagement/TimelineKit/DirectorHandler.cs @@ -33,6 +33,7 @@ namespace AibisDream private PlayableAsset _savedPlayableAsset; private Coroutine _pendingResetToStartCoroutine; private string _lastAddressableKey; + private bool _hasEverAppliedPlayback; #if UNITY_EDITOR /// @@ -97,6 +98,12 @@ namespace AibisDream if (director == null) return; director.time = 0; director.Evaluate(); + MarkPlaybackApplied(); + } + + private void MarkPlaybackApplied() + { + _hasEverAppliedPlayback = true; } /// @@ -413,7 +420,8 @@ namespace AibisDream { directorName = timelineName, isActive = gameObject.activeSelf, - loadedAddressableKey = _lastAddressableKey + loadedAddressableKey = _lastAddressableKey, + hasEverAppliedPlayback = _hasEverAppliedPlayback }; if (director == null) @@ -422,6 +430,12 @@ namespace AibisDream return entry; } + if (!_hasEverAppliedPlayback) + { + entry.phase = TimelinePlaybackPhase.Stopped.ToString(); + return entry; + } + var duration = director.duration; var time = director.time; if (duration > 0 && time >= duration - 0.01) @@ -455,7 +469,11 @@ namespace AibisDream switch (phase) { case TimelinePlaybackPhase.AtStart: - Reset(); + if (entry.hasEverAppliedPlayback) + { + Reset(); + } + break; case TimelinePlaybackPhase.AtEnd: if (!string.IsNullOrEmpty(entry.loadedAddressableKey)) @@ -468,8 +486,8 @@ namespace AibisDream } break; + case TimelinePlaybackPhase.Stopped: default: - Reset(); break; } } @@ -486,6 +504,7 @@ namespace AibisDream } director.Stop(); + MarkPlaybackApplied(); } private IEnumerator RestoreAtEndFromAddressable(string addressableKey)