From 7e579a2eb0e6cf05b15137a57fdf82082ff40f3c Mon Sep 17 00:00:00 2001 From: Ding Yuntian <1491671119@qq.com> Date: Mon, 25 May 2026 18:43:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=BF=AE=E5=A4=8D=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=B5=81=E8=BD=AC=E5=8A=A8=E7=94=BB=E9=87=8D=E5=8F=A0=E5=92=8C?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripts/UI/Panel/PlayTool/TimeTurner.cs | 32 +++++++++++++++++-- Assets/Scripts/UI/Panel/PlayToolPanel.cs | 17 +++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/UI/Panel/PlayTool/TimeTurner.cs b/Assets/Scripts/UI/Panel/PlayTool/TimeTurner.cs index 8eb93a9c1..2b0894d15 100644 --- a/Assets/Scripts/UI/Panel/PlayTool/TimeTurner.cs +++ b/Assets/Scripts/UI/Panel/PlayTool/TimeTurner.cs @@ -17,9 +17,19 @@ namespace AibisDream.UI [SerializeField] private float holdTime = 1f; [SerializeField] private float inoutTime = 0.5f; + private int _runVersion; + + public void ForceStop() + { + _runVersion++; + ResetVisuals(); + } + public IEnumerator TurnTimeTo(string originState, string targetState) { + var version = ++_runVersion; var originImage = originAnimator.GetComponent(); + // 设置起始状态 targetAnimator.gameObject.SetActive(true); originAnimator.gameObject.SetActive(true); @@ -34,17 +44,35 @@ namespace AibisDream.UI originImage.color = Color.white; // 淡入 - yield return canvasGroup.DOFade(1, inoutTime).WaitForCompletion();; + yield return canvasGroup.DOFade(1, inoutTime).WaitForCompletion(); + if (version != _runVersion) yield break; + // 等待静止时间 yield return new WaitForSeconds(holdTime); + if (version != _runVersion) yield break; // 淡出起始状态 - yield return originAnimator.GetComponent().DOFade(0, fadeTime).WaitForCompletion(); + yield return originImage.DOFade(0, fadeTime).WaitForCompletion(); + if (version != _runVersion) yield break; // 等待静止时间 yield return new WaitForSeconds(holdTime); + if (version != _runVersion) yield break; + // 淡出 yield return canvasGroup.DOFade(0, inoutTime).WaitForCompletion(); + if (version != _runVersion) yield break; + + ResetVisuals(); + } + + private void ResetVisuals() + { + canvasGroup.DOKill(); + originAnimator.GetComponent().DOKill(); + + canvasGroup.alpha = 0; + originAnimator.GetComponent().color = Color.white; targetAnimator.gameObject.SetActive(false); originAnimator.gameObject.SetActive(false); diff --git a/Assets/Scripts/UI/Panel/PlayToolPanel.cs b/Assets/Scripts/UI/Panel/PlayToolPanel.cs index d2d32a53d..a5f3ed0db 100644 --- a/Assets/Scripts/UI/Panel/PlayToolPanel.cs +++ b/Assets/Scripts/UI/Panel/PlayToolPanel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using AibisDream.Framework; using AibisDream.Kit; @@ -35,6 +35,7 @@ namespace AibisDream.UI private ModalWindow _warningWindow; private SignBoard _signBoard; private TimeTurner _timeTurner; + private int _timeFlowsVersion; #endregion @@ -211,18 +212,32 @@ namespace AibisDream.UI private void HideAll() { + _timeFlowsVersion++; + + _fadeImage.DOKill(); + _fadeImage.color = Color.clear; + _fadeImage.gameObject.SetActive(false); + _fullScreenImage.FadeOut(0.1f); _showObjImage.FadeOut(0.1f); _showObjPanel.SetActive(false); + + _timeTurner.ForceStop(); } // ------------------------------- 时间流转 ------------------------------- public IEnumerator TimeFlowsOn(string originState, string targetState) { + var version = ++_timeFlowsVersion; + // 黑屏淡入 yield return _fadeImage.FadeInAsync(0.5f); + if (version != _timeFlowsVersion) yield break; + // 时间流转 yield return _timeTurner.TurnTimeTo(originState, targetState); + if (version != _timeFlowsVersion) yield break; + // 黑屏淡出 yield return _fadeImage.FadeOutAsync(0.5f); }