fix(timeline-kit): 避免未播放 Timeline 读档时被 Reset
This commit is contained in:
@@ -33,6 +33,7 @@ namespace AibisDream
|
||||
private PlayableAsset _savedPlayableAsset;
|
||||
private Coroutine _pendingResetToStartCoroutine;
|
||||
private string _lastAddressableKey;
|
||||
private bool _hasEverAppliedPlayback;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
/// <summary>
|
||||
@@ -97,6 +98,12 @@ namespace AibisDream
|
||||
if (director == null) return;
|
||||
director.time = 0;
|
||||
director.Evaluate();
|
||||
MarkPlaybackApplied();
|
||||
}
|
||||
|
||||
private void MarkPlaybackApplied()
|
||||
{
|
||||
_hasEverAppliedPlayback = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user