From 88604b44893da64baac068dc5f33021a922a8b84 Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Mon, 14 Jul 2025 14:57:10 +0900 Subject: [PATCH] =?UTF-8?q?GameFlow=20=EB=B0=8F=20SceneManager=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_DDD/_Scripts/GameFlow/GameFlowManager.cs | 5 +--- .../Scene/FadeSceneTransitionHandlerSo.cs | 23 +++++++++++++++++++ .../FadeSceneTransitionHandlerSo.cs.meta | 2 ++ .../GameFramework/{ => Scene}/SceneManager.cs | 17 ++++++++++++-- .../{ => Scene}/SceneManager.cs.meta | 0 .../Scene/SceneTransitionHandler.cs | 11 +++++++++ .../Scene/SceneTransitionHandler.cs.meta | 2 ++ .../Scene/SceneTransitionHandlerSo.cs | 11 +++++++++ .../Scene/SceneTransitionHandlerSo.cs.meta | 2 ++ 9 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs.meta rename Assets/_DDD/_Scripts/GameFramework/{ => Scene}/SceneManager.cs (84%) rename Assets/_DDD/_Scripts/GameFramework/{ => Scene}/SceneManager.cs.meta (100%) create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs.meta create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs create mode 100644 Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs.meta diff --git a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs index 6ad63d9ca..a60d6aaf6 100644 --- a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs +++ b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs @@ -106,10 +106,7 @@ private async void OpenFlowScene(GameFlowState newFlowState) { if (GetFlowScene(newFlowState, out var sceneToLoad)) { - await FadeManager.Instance.FadeOut(); - SceneManager.Instance.ActivateScene(sceneToLoad); - await Task.Delay(1000); - await FadeManager.Instance.FadeIn(); + await SceneManager.Instance.ActivateScene(sceneToLoad); } else { diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs b/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs new file mode 100644 index 000000000..ed8a033cb --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using UnityEngine; + +namespace DDD +{ + [CreateAssetMenu(fileName = "FadeSceneTransitionHandlerSo", menuName = "GameFramework/FadeSceneTransitionHandlerSo")] + public class FadeSceneTransitionHandlerSo : SceneTransitionHandler + { + [SerializeField] + private float _delayBeforeFadeIn = 1f; + + public override async Task OnBeforeSceneActivate(SceneType sceneType) + { + await FadeManager.Instance.FadeOut(); + } + + public override async Task OnAfterSceneActivate(SceneType sceneType) + { + await Task.Delay((int)(_delayBeforeFadeIn * 1000)); + await FadeManager.Instance.FadeIn(); + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs.meta b/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs.meta new file mode 100644 index 000000000..d5e49e45f --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/FadeSceneTransitionHandlerSo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 703a11d70c312b940b49b9a0f89746d1 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/SceneManager.cs b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs similarity index 84% rename from Assets/_DDD/_Scripts/GameFramework/SceneManager.cs rename to Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs index 78a7f7e84..ef559c9d9 100644 --- a/Assets/_DDD/_Scripts/GameFramework/SceneManager.cs +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using UnityEngine; using UnityEngine.ResourceManagement.ResourceProviders; @@ -15,10 +16,12 @@ public enum SceneType public class SceneManager : Singleton, IManager { + [SerializeField] + private SceneTransitionHandlerSo _sceneTransitionHandlerSo; + private Dictionary _loadedScenes; private SceneInstance _currentSceneInstance; - public Action OnSceneChanged; public void Init() @@ -69,8 +72,13 @@ public async Task PreloadSceneAsync(SceneType sceneType) } } - public void ActivateScene(SceneType sceneType) + public async Task ActivateScene(SceneType sceneType) { + foreach (var handler in _sceneTransitionHandlerSo.Handlers.Where(handler => handler != null)) + { + await handler.OnBeforeSceneActivate(sceneType); + } + if (_loadedScenes.TryGetValue(sceneType, out var sceneInstance)) { foreach (var root in sceneInstance.Scene.GetRootGameObjects()) @@ -85,6 +93,11 @@ public void ActivateScene(SceneType sceneType) { Debug.LogError($"[SceneManager] Scene not loaded: {sceneType}"); } + + foreach (var handler in _sceneTransitionHandlerSo.Handlers.Where(handler => handler != null)) + { + await handler.OnAfterSceneActivate(sceneType); + } } public void DeactivateScene(SceneType sceneType) diff --git a/Assets/_DDD/_Scripts/GameFramework/SceneManager.cs.meta b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/GameFramework/SceneManager.cs.meta rename to Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs.meta diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs new file mode 100644 index 000000000..7dce93b25 --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using UnityEngine; + +namespace DDD +{ + public abstract class SceneTransitionHandler : ScriptableObject + { + public abstract Task OnBeforeSceneActivate(SceneType sceneType); + public abstract Task OnAfterSceneActivate(SceneType sceneType); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs.meta b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs.meta new file mode 100644 index 000000000..53eb1a1d7 --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandler.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 23db33a4e8a50464e8b57e36db4b0f25 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs new file mode 100644 index 000000000..8e27b2ba7 --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace DDD +{ + [CreateAssetMenu(fileName = "SceneTransitionHandlerSo", menuName = "GameFramework/SceneTransitionHandlerSo")] + public class SceneTransitionHandlerSo : ScriptableObject + { + public List Handlers = new(); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs.meta b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs.meta new file mode 100644 index 000000000..836b515f4 --- /dev/null +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneTransitionHandlerSo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c8d0f2d4eb3cfdc45a258a64641fe3e8 \ No newline at end of file