refactor: 将淡入淡出迁移到 ScreenTransitionPanel

- 将 BaseYarnCommand、FixSystemNew 各状态、GameManager、
  SaveSystem、PlayToolPanel 中的 PlayToolPanel 遮罩调用
  统一迁移到 ScreenTransitionPanel
- 从 PlayToolPanel 移除 _fadeImage 及相关 fade 方法
- 从 Play Tool Panel Prefab 移除 Fade Image 子对象
This commit is contained in:
2026-07-16 17:56:51 +08:00
parent 4100232162
commit f51a670239
11 changed files with 81 additions and 199 deletions
@@ -598,7 +598,6 @@ RectTransform:
- {fileID: 2435851631326673332}
- {fileID: 3369822658199011853}
- {fileID: 1952989201910221321}
- {fileID: 7001172210609801577}
- {fileID: 3098988001922718290}
- {fileID: 5986227694117348860}
- {fileID: 4753076094804246705}
@@ -631,81 +630,6 @@ MonoBehaviour:
m_EditorClassIdentifier:
objWidth: 700
objHeight: 550
--- !u!1 &7868860406131582412
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7001172210609801577}
- component: {fileID: 5984596302561387657}
- component: {fileID: 756790148796958745}
m_Layer: 5
m_Name: Fade Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &7001172210609801577
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7868860406131582412}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5358297362873264388}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5984596302561387657
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7868860406131582412}
m_CullTransparentMesh: 1
--- !u!114 &756790148796958745
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7868860406131582412}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 217208fd7d83b3c4a8e9a8e08baec32c, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1001 &5111124973336394898
PrefabInstance:
m_ObjectHideFlags: 0
@@ -47,28 +47,28 @@ namespace AibisDream
[YarnCommand("fade_in")]
public static IEnumerator FadeIn(float duration = 1)
{
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
return panel.FadeInAsync(duration);
}
[YarnCommand("fade_out")]
public static IEnumerator FadeOut(float duration = 1)
{
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
return panel.FadeOutAsync(duration);
}
[YarnCommand("fade_in_sync")]
public static void FadeInSync(float duration = 1)
{
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
panel.FadeInSync(duration);
}
[YarnCommand("fade_out_sync")]
public static void FadeOutSync(float duration = 1)
{
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
panel.FadeOutSync(duration);
}
@@ -72,7 +72,7 @@ namespace AibisDream.FixSystem
{
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModuleCenter);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
yield return new WaitForSeconds(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return FixPanelSystem.Instance.StartAllSystems();
@@ -35,20 +35,20 @@ namespace AibisDream.FixSystem
}
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmoDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
yield return cuttingManager.StartCutting(bodyModule);
}
public IEnumerator Exit(FixTransition transition)
{
// 无
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
var cuttingManager = FixSystemCenter.SystemDic.Get<CuttingManager>();
cuttingManager.ClearCutLine();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
}
}
@@ -80,20 +80,20 @@ namespace AibisDream.FixSystem
}
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemoryDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
yield return cuttingManager.StartCutting(bodyModule);
}
public IEnumerator Exit(FixTransition transition)
{
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
var cuttingManager = FixSystemCenter.SystemDic.Get<CuttingManager>();
cuttingManager.ClearCutLine();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
}
}
@@ -124,19 +124,19 @@ namespace AibisDream.FixSystem
}
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogicDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
yield return cuttingManager.StartCutting(bodyModule);
}
public IEnumerator Exit(FixTransition transition)
{
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.1f);
var cuttingManager = FixSystemCenter.SystemDic.Get<CuttingManager>();
cuttingManager.ClearCutLine();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.1f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.1f);
}
}
}
@@ -27,11 +27,11 @@ namespace AibisDream.FixSystem
// 切换到表达相机
yield return TimelineCenter.Instance.PlayTimelineAsync("透镜/透镜in");
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
expressionManager.OpenView();
// 切换到深度表达相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.ExpressionDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入");
}
@@ -39,7 +39,7 @@ namespace AibisDream.FixSystem
{
var expressionManager = FixSystemCenter.SystemDic.Get<ExpressionManager>();
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
// 重置身体模块
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
@@ -47,7 +47,7 @@ namespace AibisDream.FixSystem
// 关闭表达系统视图
expressionManager.CloseView();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return TimelineCenter.Instance.PlayTimelineAsync("透镜/透镜out");
yield break;
@@ -69,10 +69,10 @@ namespace AibisDream.FixSystem
}
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Emo);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
//emoManager.OpenView();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EmoDeep);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
}
public IEnumerator Exit(FixTransition transition)
@@ -102,14 +102,14 @@ namespace AibisDream.FixSystem
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
// 切换到分析模式相机
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.AnalysisMode);
// 进入分析模式
if (analysisModeManager != null)
{
analysisModeManager.OnEnter();
}
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
}
public IEnumerator Exit(FixTransition transition)
@@ -117,7 +117,7 @@ namespace AibisDream.FixSystem
float duration = 0.5f;
var analysisModeManager = FixSystemCenter.SystemDic.Get<MiniGame.Language.AnalysisModeManager>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
// 退出分析模式
if (analysisModeManager != null)
@@ -125,7 +125,7 @@ namespace AibisDream.FixSystem
analysisModeManager.OnExit();
}
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
}
}
@@ -150,13 +150,13 @@ namespace AibisDream.FixSystem
if (salesManager != null)
{
// FadeIn
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
// 打开销售系统视图,传入systemView参数
salesManager.OpenView();
// FadeOut
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
// 销售模块使用自身的气泡槽位;缺失时再回退到 ScreenSystem,避免读到错误的槽位配置
if (BubbleSlotKit.Instance.TryGet(BubbleSlotEnum.Sales, out _))
@@ -177,7 +177,7 @@ namespace AibisDream.FixSystem
float duration = 0.5f;
var salesManager = FixSystemCenter.SystemDic.Get<AibisDream.MiniGame.Language.SalesManager>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
// 关闭销售系统视图
if (salesManager != null)
@@ -185,7 +185,7 @@ namespace AibisDream.FixSystem
salesManager.CloseView();
}
// 关闭前先播放钳子放下盖子,完成后再结
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
yield return TimelineCenter.Instance.PlayTimelineAsync("钳子/放下盖子");
yield return null;
}
@@ -25,12 +25,12 @@ namespace AibisDream.FixSystem
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
ufSystem.OpenUFView();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep);
eyeSystem.OnEnter();
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Eye);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
}
public IEnumerator Exit(FixTransition transition)
@@ -38,11 +38,11 @@ namespace AibisDream.FixSystem
float duration = 0.5f;
var ufSystem = FixSystemCenter.SystemDic.Get<UFSystem>();
var eyeSystem = FixSystemCenter.SystemDic.Get<EyeSystem>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
eyeSystem.OnExit();
ufSystem.CloseUFView();
yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
}
}
@@ -69,11 +69,11 @@ namespace AibisDream.FixSystem
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep);
eyeSystem.OnEnter();
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Eye);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
}
public IEnumerator EnterImmediate(FixTransition transition)
@@ -89,11 +89,11 @@ namespace AibisDream.FixSystem
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
float duration = 0.5f;
var eyeSystem = FixSystemCenter.SystemDic.Get<EyeSystem>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye);
eyeSystem.OnExit();
yield return new WaitForSeconds(0.1f);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
//关上
var eyeModule = bodyModuleSystem.FindBodyModuleByType<EyeModule>();
yield return eyeModule.CloseEye();
@@ -120,9 +120,9 @@ namespace AibisDream.FixSystem
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
// 相机聚焦到目标位
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Memory);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
memorySystem.OnEnter();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Memory);
}
@@ -141,10 +141,10 @@ namespace AibisDream.FixSystem
{
float duration = 0.5f;
var memorySystem = FixSystemCenter.SystemDic.Get<MemoryProcess>();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
memorySystem.OnExit();
memorySystem.CloseMemoryView();
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
memorySystem.PullMemoryProjector();
}
+13 -11
View File
@@ -46,9 +46,9 @@ namespace AibisDream
/// </summary>
private IEnumerator AppBootstrapCoroutine()
{
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
UIManager.Instance.ShowPanel<PlayToolPanel>();
playTool?.ApplyFadeScreenCovered(true);
var transitionPanel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
UIManager.Instance.ShowPanel<ScreenTransitionPanel>();
transitionPanel?.ApplyScreenCovered(true);
yield return LocalizationKit.WaitUntilReady();
@@ -56,9 +56,9 @@ namespace AibisDream
yield return LocalizationKit.WaitForUIRefresh();
if (playTool != null)
if (transitionPanel != null)
{
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
yield return transitionPanel.FadeOutAsync(MainMenuFadeDuration);
}
}
@@ -129,7 +129,7 @@ namespace AibisDream
private IEnumerator LoadFirstScene()
{
ChapterController.Instance.UnlockChapter(_currentTalkSceneSo.Value);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
yield return SceneLoader.Instance.LoadSceneAsync(_currentTalkSceneSo.Value.firstSceneName);
yield return WaitForSceneDialogueReady();
DialogController.Instance.StartDialog(_currentTalkSceneSo.Value.yarnProject);
@@ -224,10 +224,12 @@ namespace AibisDream
private IEnumerator RestartCoroutine()
{
var playTool = UIManager.Instance.GetPanel<PlayToolPanel>();
var transitionPanel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
UIManager.Instance.ShowPanel<PlayToolPanel>();
if (playTool != null)
UIManager.Instance.ShowPanel<ScreenTransitionPanel>();
if (transitionPanel != null)
{
yield return playTool.FadeInAsync(MainMenuFadeDuration);
yield return transitionPanel.FadeInAsync(MainMenuFadeDuration);
}
// 清理所有系统注册
@@ -255,9 +257,9 @@ namespace AibisDream
yield return LocalizationKit.WaitForUIRefresh();
if (playTool != null)
if (transitionPanel != null)
{
yield return playTool.FadeOutAsync(MainMenuFadeDuration);
yield return transitionPanel.FadeOutAsync(MainMenuFadeDuration);
}
}
@@ -316,7 +318,7 @@ namespace AibisDream
{
_currentTalkSceneSo.Value = next;
ChapterController.Instance.UnlockChapter(_currentTalkSceneSo.Value);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync();
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync();
yield return SceneLoader.Instance.LoadSceneAsync(_currentTalkSceneSo.Value.firstSceneName);
yield return WaitForSceneDialogueReady();
DialogController.Instance.StartDialog(_currentTalkSceneSo.Value.yarnProject);
@@ -318,7 +318,7 @@ namespace AibisDream.SaveSystem
private static IEnumerator FadeInForRestore()
{
AddRestoreLog("Begin restore fade in");
var panel = UIManager.Instance?.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance?.GetPanel<ScreenTransitionPanel>();
if (panel != null)
{
yield return panel.FadeInAsync(RestoreFadeDuration, useUnscaledTime: true);
@@ -328,7 +328,7 @@ namespace AibisDream.SaveSystem
private static IEnumerator FadeOutForRestore()
{
AddRestoreLog("End restore fade out");
var panel = UIManager.Instance?.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance?.GetPanel<ScreenTransitionPanel>();
if (panel != null)
{
yield return panel.FadeOutAsync(RestoreFadeDuration, useUnscaledTime: true);
+1 -1
View File
@@ -174,7 +174,7 @@ namespace AibisDream.SaveSystem
public float saturationWeight;
/// <summary>
/// <see cref="PlayToolPanel"/> 演出遮罩终态:<c>true</c> = 黑屏盖住(<c>FadeIn</c> 完成)
/// <see cref="ScreenTransitionPanel"/> 全局遮罩终态:<c>true</c> = 画面被完全盖住
/// <c>false</c> = 画面可见(<c>FadeOut</c> 完成或遮罩未启用)。不记录转场中间 alpha。
/// </summary>
public bool isFadeScreenCovered;
@@ -4,8 +4,8 @@ using UnityEngine;
namespace AibisDream.SaveSystem
{
/// <summary>
/// screen section 的捕获/还原实现:屏幕后处理饱和度 + PlayToolPanel 遮罩终态(黑屏盖住 / 画面可见)
/// screen section:饱和度 + PlayToolPanel 遮罩终态(<see cref="PlayToolPanel.CaptureFadeScreenCovered"/>)。
/// screen section 的捕获/还原实现:屏幕后处理饱和度 + ScreenTransitionPanel 遮罩终态
/// screen section:饱和度 + 全局遮罩终态(<see cref="ScreenTransitionPanel.CaptureScreenCovered"/>)。
/// 供 <see cref="ScreenSnapshotProvider"/> 委托,避免 Provider 直接依赖 UI 细节。
/// </summary>
public static class ScreenSnapshotHelper
@@ -24,10 +24,10 @@ namespace AibisDream.SaveSystem
if (UIManager.Instance != null)
{
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
if (panel != null)
{
dto.isFadeScreenCovered = panel.CaptureFadeScreenCovered();
dto.isFadeScreenCovered = panel.CaptureScreenCovered();
}
}
@@ -52,8 +52,8 @@ namespace AibisDream.SaveSystem
return;
}
var panel = UIManager.Instance.GetPanel<PlayToolPanel>();
panel?.ApplyFadeScreenCovered(dto.isFadeScreenCovered);
var panel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
panel?.ApplyScreenCovered(dto.isFadeScreenCovered);
}
}
@@ -66,8 +66,8 @@ namespace AibisDream.SaveSystem
}
_hasDeferredFadeScreenCovered = false;
var panel = UIManager.Instance?.GetPanel<PlayToolPanel>();
panel?.ApplyFadeScreenCovered(_deferredFadeScreenCovered);
var panel = UIManager.Instance?.GetPanel<ScreenTransitionPanel>();
panel?.ApplyScreenCovered(_deferredFadeScreenCovered);
}
}
}
+13 -57
View File
@@ -11,7 +11,7 @@ using UnityEngine.UI;
namespace AibisDream.UI
{
/// <summary>
/// 主要用来放置淡入淡出,图片展示等演出工具
/// 主要用来放置图片展示、窗口和时间流转等演出工具
/// </summary>
public class PlayToolPanel : MonoBehaviour, IUIPanel
{
@@ -26,7 +26,6 @@ namespace AibisDream.UI
#region
private Image _fadeImage;
private GameObject _showObjPanel;
private Image _showObjImage;
private Image _fullScreenImage;
@@ -46,7 +45,6 @@ namespace AibisDream.UI
private void InitRefs()
{
_fadeImage = transform.Find("Fade Image").GetComponent<Image>();
_showObjPanel = transform.Find("Show Obj").gameObject;
_showObjImage = _showObjPanel.transform.Find("Obj").GetComponent<Image>();
_fullScreenImage = transform.Find("Full Screen Image").GetComponent<Image>();
@@ -65,56 +63,6 @@ namespace AibisDream.UI
: picName;
}
public IEnumerator FadeInAsync(float duration = 1, bool useUnscaledTime = false)
{
return _fadeImage.FadeInAsync(duration, useUnscaledTime);
}
public IEnumerator FadeOutAsync(float duration = 1, bool useUnscaledTime = false)
{
return _fadeImage.FadeOutAsync(duration, useUnscaledTime);
}
public void FadeInSync(float duration = 1)
{
StartCoroutine(FadeInAsync(duration));
}
public void FadeOutSync(float duration = 1)
{
StartCoroutine(FadeOutAsync(duration));
}
/// <summary>
/// 捕获遮罩终态:黑屏盖住(FadeIn 完成) vs 画面可见(FadeOut 完成 / HideAll)。
/// 与 <see cref="FadeKit"/> 一致——终态以 <c>gameObject.activeSelf</c> 为准(FadeOut 结束会 SetActive(false))。
/// </summary>
public bool CaptureFadeScreenCovered()
{
if (_fadeImage == null) return false;
return _fadeImage.gameObject.activeSelf;
}
/// <summary>
/// 按快照终态还原遮罩(同步设置 active 与颜色,与 <see cref="FadeKit"/> 终态一致)。
/// </summary>
public void ApplyFadeScreenCovered(bool isCovered)
{
if (_fadeImage == null) return;
_fadeImage.DOKill();
if (isCovered)
{
_fadeImage.gameObject.SetActive(true);
_fadeImage.color = Color.white;
}
else
{
_fadeImage.color = Color.clear;
_fadeImage.gameObject.SetActive(false);
}
}
/// <summary>
/// 显示物体
/// </summary>
@@ -240,7 +188,7 @@ namespace AibisDream.UI
}
/// <summary>
/// 清理演出层内容,但不影响黑屏遮罩(用于返回主界面时在遮罩下重置状态)。
/// 清理演出层内容,但不影响全局转场面板(用于返回主界面时在遮罩下重置状态)。
/// </summary>
public void ClearPresentationEffects()
{
@@ -258,8 +206,13 @@ namespace AibisDream.UI
{
var version = ++_timeFlowsVersion;
var transitionPanel = UIManager.Instance.GetPanel<ScreenTransitionPanel>();
// 黑屏淡入
yield return _fadeImage.FadeInAsync(0.5f);
if (transitionPanel != null)
{
yield return transitionPanel.FadeInAsync(0.5f);
}
if (version != _timeFlowsVersion) yield break;
// 时间流转
@@ -267,7 +220,10 @@ namespace AibisDream.UI
if (version != _timeFlowsVersion) yield break;
// 黑屏淡出
yield return _fadeImage.FadeOutAsync(0.5f);
if (transitionPanel != null)
{
yield return transitionPanel.FadeOutAsync(0.5f);
}
}
#region
@@ -299,4 +255,4 @@ namespace AibisDream.UI
yield return new WaitUntil(() => !_warningWindow.gameObject.activeSelf);
}
}
}
}