fix(ui): 主界面加载前黑屏遮罩,就绪后再淡出
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using AibisDream.Kit;
|
||||
using System.Collections;
|
||||
using AibisDream.Kit;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Localization;
|
||||
using UnityEngine.Localization.Settings;
|
||||
@@ -137,5 +138,23 @@ namespace AibisDream.Framework
|
||||
{
|
||||
await LocalizationSettings.InitializationOperation.Task;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 等待本地化系统初始化完成(含 SettingLoader 触发的语言切换)。
|
||||
/// </summary>
|
||||
public static IEnumerator WaitUntilReady()
|
||||
{
|
||||
yield return LocalizationSettings.InitializationOperation;
|
||||
yield return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 等待 LocalizeStringEvent 等 UI 组件刷新文案。
|
||||
/// </summary>
|
||||
public static IEnumerator WaitForUIRefresh()
|
||||
{
|
||||
yield return null;
|
||||
Canvas.ForceUpdateCanvases();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,8 @@ namespace AibisDream
|
||||
|
||||
#endregion
|
||||
|
||||
private const float MainMenuFadeDuration = 0.5f;
|
||||
|
||||
private BindProperty<TalkSceneSO> _currentTalkSceneSo;
|
||||
public override void OnSingletonInit()
|
||||
{
|
||||
@@ -36,9 +38,28 @@ namespace AibisDream
|
||||
// 场景So事件注册
|
||||
_currentTalkSceneSo = new BindProperty<TalkSceneSO>();
|
||||
|
||||
ActionKit.Sequence()
|
||||
.Callback(() => EnumEventSystem.Global.Send(GameLoopEnum.AppStart))
|
||||
.Start(this);
|
||||
StartCoroutine(AppBootstrapCoroutine());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动主界面:先黑屏,待本地化与 UI 就绪后再淡出,避免玩家看到初始化过程。
|
||||
/// </summary>
|
||||
private IEnumerator AppBootstrapCoroutine()
|
||||
{
|
||||
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
|
||||
UIManager.Instance.ShowPanel<PlayToolPanel>();
|
||||
playTool?.ApplyFadeScreenCovered(true);
|
||||
|
||||
yield return LocalizationKit.WaitUntilReady();
|
||||
|
||||
EnumEventSystem.Global.Send(GameLoopEnum.AppStart);
|
||||
|
||||
yield return LocalizationKit.WaitForUIRefresh();
|
||||
|
||||
if (playTool != null)
|
||||
{
|
||||
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadAllSceneSos()
|
||||
@@ -202,7 +223,12 @@ namespace AibisDream
|
||||
|
||||
private IEnumerator RestartCoroutine()
|
||||
{
|
||||
UIManager.Instance.GetPanel<PlayToolPanel>().FadeInSync(0.1f);
|
||||
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
|
||||
UIManager.Instance.ShowPanel<PlayToolPanel>();
|
||||
if (playTool != null)
|
||||
{
|
||||
yield return playTool.FadeInAsync(MainMenuFadeDuration);
|
||||
}
|
||||
|
||||
// 清理所有系统注册
|
||||
if (FixSystemCenter.SystemDic != null)
|
||||
@@ -210,10 +236,15 @@ namespace AibisDream
|
||||
FixSystemCenter.SystemDic.Clear();
|
||||
}
|
||||
|
||||
playTool?.ClearPresentationEffects();
|
||||
|
||||
// 执行场景卸载等功能
|
||||
CameraKit.Instance.ResetCamera();
|
||||
yield return SceneLoader.Instance.UnloadSceneAsync();
|
||||
DialogController.Instance.StopDialog();
|
||||
|
||||
yield return LocalizationKit.WaitUntilReady();
|
||||
|
||||
EnumEventSystem.Global.Send(GameLoopEnum.GameQuit);
|
||||
// 音频继续
|
||||
AudioManager.Instance.UnPauseAll();
|
||||
@@ -222,7 +253,12 @@ namespace AibisDream
|
||||
// 关闭结束面板
|
||||
UIManager.Instance.HidePanel<EndPanel>();
|
||||
|
||||
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync();
|
||||
yield return LocalizationKit.WaitForUIRefresh();
|
||||
|
||||
if (playTool != null)
|
||||
{
|
||||
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -42,7 +42,6 @@ namespace AibisDream.UI
|
||||
private void Awake()
|
||||
{
|
||||
InitRefs();
|
||||
EnumEventSystem.Global.Register(GameLoopEnum.GameQuit, HideAll);
|
||||
}
|
||||
|
||||
private void InitRefs()
|
||||
@@ -240,14 +239,13 @@ namespace AibisDream.UI
|
||||
_signBoard.CloseSignBoard();
|
||||
}
|
||||
|
||||
private void HideAll()
|
||||
/// <summary>
|
||||
/// 清理演出层内容,但不影响黑屏遮罩(用于返回主界面时在遮罩下重置状态)。
|
||||
/// </summary>
|
||||
public void ClearPresentationEffects()
|
||||
{
|
||||
_timeFlowsVersion++;
|
||||
|
||||
_fadeImage.DOKill();
|
||||
_fadeImage.color = Color.clear;
|
||||
_fadeImage.gameObject.SetActive(false);
|
||||
|
||||
_fullScreenImage.FadeOut(0.1f);
|
||||
_showObjImage.FadeOut(0.1f);
|
||||
_showObjPanel.SetActive(false);
|
||||
|
||||
Reference in New Issue
Block a user