GameFlow 및 SceneManager 구조 개선
This commit is contained in:
parent
5edb192b63
commit
88604b4489
@ -106,10 +106,7 @@ private async void OpenFlowScene(GameFlowState newFlowState)
|
|||||||
{
|
{
|
||||||
if (GetFlowScene(newFlowState, out var sceneToLoad))
|
if (GetFlowScene(newFlowState, out var sceneToLoad))
|
||||||
{
|
{
|
||||||
await FadeManager.Instance.FadeOut();
|
await SceneManager.Instance.ActivateScene(sceneToLoad);
|
||||||
SceneManager.Instance.ActivateScene(sceneToLoad);
|
|
||||||
await Task.Delay(1000);
|
|
||||||
await FadeManager.Instance.FadeIn();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 703a11d70c312b940b49b9a0f89746d1
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.ResourceManagement.ResourceProviders;
|
using UnityEngine.ResourceManagement.ResourceProviders;
|
||||||
@ -15,10 +16,12 @@ public enum SceneType
|
|||||||
|
|
||||||
public class SceneManager : Singleton<SceneManager>, IManager
|
public class SceneManager : Singleton<SceneManager>, IManager
|
||||||
{
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private SceneTransitionHandlerSo _sceneTransitionHandlerSo;
|
||||||
|
|
||||||
private Dictionary<SceneType, SceneInstance> _loadedScenes;
|
private Dictionary<SceneType, SceneInstance> _loadedScenes;
|
||||||
|
|
||||||
private SceneInstance _currentSceneInstance;
|
private SceneInstance _currentSceneInstance;
|
||||||
|
|
||||||
public Action<SceneInstance> OnSceneChanged;
|
public Action<SceneInstance> OnSceneChanged;
|
||||||
|
|
||||||
public void Init()
|
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))
|
if (_loadedScenes.TryGetValue(sceneType, out var sceneInstance))
|
||||||
{
|
{
|
||||||
foreach (var root in sceneInstance.Scene.GetRootGameObjects())
|
foreach (var root in sceneInstance.Scene.GetRootGameObjects())
|
||||||
@ -85,6 +93,11 @@ public void ActivateScene(SceneType sceneType)
|
|||||||
{
|
{
|
||||||
Debug.LogError($"[SceneManager] Scene not loaded: {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)
|
public void DeactivateScene(SceneType sceneType)
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 23db33a4e8a50464e8b57e36db4b0f25
|
@ -0,0 +1,11 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace DDD
|
||||||
|
{
|
||||||
|
[CreateAssetMenu(fileName = "SceneTransitionHandlerSo", menuName = "GameFramework/SceneTransitionHandlerSo")]
|
||||||
|
public class SceneTransitionHandlerSo : ScriptableObject
|
||||||
|
{
|
||||||
|
public List<SceneTransitionHandler> Handlers = new();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c8d0f2d4eb3cfdc45a258a64641fe3e8
|
Loading…
Reference in New Issue
Block a user