From f0e24f4c43e9500fe4e575fe99ebb52de3a1f777 Mon Sep 17 00:00:00 2001 From: NTG_Lenovo Date: Mon, 21 Jul 2025 13:11:38 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=ED=94=8C=EB=A1=9C?= =?UTF-8?q?=EC=9A=B0=20=EB=B3=80=EA=B2=BD=20(PreInit=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssetGroups/Group.asset | 4 +- ...onment.asset => CreateEnvironmentSo.asset} | 2 +- ...et.meta => CreateEnvironmentSo.asset.meta} | 0 ...r.asset => CreateRestaurantPlayerSo.asset} | 2 +- ...ta => CreateRestaurantPlayerSo.asset.meta} | 0 .../_Scripts/AssetManagement/AssetManager.cs | 18 +++--- .../_Scripts/CameraSystem/CameraManager.cs | 10 +++- Assets/_DDD/_Scripts/GameData/DataManager.cs | 60 +++++++++---------- .../_DDD/_Scripts/GameFlow/GameFlowManager.cs | 28 +++++---- .../_Scripts/GameFramework/FadeManager.cs | 9 ++- .../_Scripts/GameFramework/GameManager.cs | 14 ++++- .../_DDD/_Scripts/GameFramework/IManager.cs | 5 +- .../GameFramework/Scene/SceneManager.cs | 11 +++- ...tPlayer.cs => CreateRestaurantPlayerSo.cs} | 4 +- ....meta => CreateRestaurantPlayerSo.cs.meta} | 0 .../RestaurantController.cs | 30 ++++++---- ...eEnvironment.cs => CreateEnvironmentSo.cs} | 7 +-- ...nt.cs.meta => CreateEnvironmentSo.cs.meta} | 0 18 files changed, 116 insertions(+), 88 deletions(-) rename Assets/_DDD/_Addressables/So/{CreateEnvironment.asset => CreateEnvironmentSo.asset} (92%) rename Assets/_DDD/_Addressables/So/{CreateEnvironment.asset.meta => CreateEnvironmentSo.asset.meta} (100%) rename Assets/_DDD/_Addressables/So/{CreateRestaurantPlayer.asset => CreateRestaurantPlayerSo.asset} (92%) rename Assets/_DDD/_Addressables/So/{CreateRestaurantPlayer.asset.meta => CreateRestaurantPlayerSo.asset.meta} (100%) rename Assets/_DDD/_Scripts/RestaurantCharacter/{CreateRestaurantPlayer.cs => CreateRestaurantPlayerSo.cs} (79%) rename Assets/_DDD/_Scripts/RestaurantCharacter/{CreateRestaurantPlayer.cs.meta => CreateRestaurantPlayerSo.cs.meta} (100%) rename Assets/_DDD/_Scripts/RestaurantEnvironment/{CreateEnvironment.cs => CreateEnvironmentSo.cs} (65%) rename Assets/_DDD/_Scripts/RestaurantEnvironment/{CreateEnvironment.cs.meta => CreateEnvironmentSo.cs.meta} (100%) diff --git a/Assets/AddressableAssetsData/AssetGroups/Group.asset b/Assets/AddressableAssetsData/AssetGroups/Group.asset index b09892dc7..554c31d1f 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Group.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Group.asset @@ -16,7 +16,7 @@ MonoBehaviour: m_GUID: 30e7f67fe9aaa7849a34c9b6e2bc53ae m_SerializeEntries: - m_GUID: 0912c3de85fd61848a41575faa2794ed - m_Address: CreateEnvironment + m_Address: CreateEnvironmentSo m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 @@ -56,7 +56,7 @@ MonoBehaviour: - Atlas FlaggedDuringContentUpdateRestriction: 0 - m_GUID: 47e757b9a170ab649af14c4d7b80ac41 - m_Address: CreateRestaurantPlayer + m_Address: CreateRestaurantPlayerSo m_ReadOnly: 0 m_SerializedLabels: [] FlaggedDuringContentUpdateRestriction: 0 diff --git a/Assets/_DDD/_Addressables/So/CreateEnvironment.asset b/Assets/_DDD/_Addressables/So/CreateEnvironmentSo.asset similarity index 92% rename from Assets/_DDD/_Addressables/So/CreateEnvironment.asset rename to Assets/_DDD/_Addressables/So/CreateEnvironmentSo.asset index a80fa8247..f97c9a363 100644 --- a/Assets/_DDD/_Addressables/So/CreateEnvironment.asset +++ b/Assets/_DDD/_Addressables/So/CreateEnvironmentSo.asset @@ -10,5 +10,5 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 419e829d5eec9544e94be59817cdb69c, type: 3} - m_Name: CreateEnvironment + m_Name: CreateEnvironmentSo m_EditorClassIdentifier: diff --git a/Assets/_DDD/_Addressables/So/CreateEnvironment.asset.meta b/Assets/_DDD/_Addressables/So/CreateEnvironmentSo.asset.meta similarity index 100% rename from Assets/_DDD/_Addressables/So/CreateEnvironment.asset.meta rename to Assets/_DDD/_Addressables/So/CreateEnvironmentSo.asset.meta diff --git a/Assets/_DDD/_Addressables/So/CreateRestaurantPlayer.asset b/Assets/_DDD/_Addressables/So/CreateRestaurantPlayerSo.asset similarity index 92% rename from Assets/_DDD/_Addressables/So/CreateRestaurantPlayer.asset rename to Assets/_DDD/_Addressables/So/CreateRestaurantPlayerSo.asset index 169223f05..f43f0110b 100644 --- a/Assets/_DDD/_Addressables/So/CreateRestaurantPlayer.asset +++ b/Assets/_DDD/_Addressables/So/CreateRestaurantPlayerSo.asset @@ -10,6 +10,6 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 246a7785bd15ac84b9f240005b987f1f, type: 3} - m_Name: CreateRestaurantPlayer + m_Name: CreateRestaurantPlayerSo m_EditorClassIdentifier: _spawnPosition: {x: 0, y: 0, z: 15} diff --git a/Assets/_DDD/_Addressables/So/CreateRestaurantPlayer.asset.meta b/Assets/_DDD/_Addressables/So/CreateRestaurantPlayerSo.asset.meta similarity index 100% rename from Assets/_DDD/_Addressables/So/CreateRestaurantPlayer.asset.meta rename to Assets/_DDD/_Addressables/So/CreateRestaurantPlayerSo.asset.meta diff --git a/Assets/_DDD/_Scripts/AssetManagement/AssetManager.cs b/Assets/_DDD/_Scripts/AssetManagement/AssetManager.cs index 277970d52..81789ebea 100644 --- a/Assets/_DDD/_Scripts/AssetManagement/AssetManager.cs +++ b/Assets/_DDD/_Scripts/AssetManagement/AssetManager.cs @@ -15,21 +15,19 @@ namespace DDD { public class AssetManager : Singleton, IManager { - public void Init() + public void PreInit() { } - public async void PostInit() + public async Task Init() { - try - { - await Addressables.InitializeAsync().Task; - } - catch (Exception e) - { - Debug.Assert(false, $"Addressables initialization failed\n{e}"); - } + await Addressables.InitializeAsync().Task; + } + + public void PostInit() + { + } public static async Task LoadAsset(string key) where T : UnityEngine.Object diff --git a/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs b/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs index 6c0a42cc6..d687456ef 100644 --- a/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs +++ b/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Threading.Tasks; using Sirenix.OdinInspector; using Unity.Cinemachine; @@ -16,12 +17,17 @@ public class CameraManager : Singleton, IManager private Dictionary _cameraGameObjects = new(); private CinemachineBrain _cinemachineBrain; - - public void Init() + + public void PreInit() { _cinemachineBrain = GetComponent(); } + public Task Init() + { + return Task.CompletedTask;; + } + public void PostInit() { diff --git a/Assets/_DDD/_Scripts/GameData/DataManager.cs b/Assets/_DDD/_Scripts/GameData/DataManager.cs index 6b65cca4e..7d12979d3 100644 --- a/Assets/_DDD/_Scripts/GameData/DataManager.cs +++ b/Assets/_DDD/_Scripts/GameData/DataManager.cs @@ -15,48 +15,46 @@ public class DataManager : Singleton, IManager private Dictionary _spriteAtlas; public bool IsInitialized { get; private set; } - - public void Init() + + public void PreInit() { } - public async void PostInit() + public async Task Init() { - try + ItemDataSo = await AssetManager.LoadAsset(DataConstants.ItemDataSo); + FoodDataSo = await AssetManager.LoadAsset(DataConstants.FoodDataSo); + EnvironmentDataSo = await AssetManager.LoadAsset(DataConstants.EnvironmentDataSo); + + List spriteAtlases = await AssetManager.LoadAssetsByLabel(DataConstants.AtlasLabel); + _spriteAtlas = new Dictionary(spriteAtlases.Count); + + foreach (var atlas in spriteAtlases) { - ItemDataSo = await AssetManager.LoadAsset(DataConstants.ItemDataSo); - FoodDataSo = await AssetManager.LoadAsset(DataConstants.FoodDataSo); - EnvironmentDataSo = await AssetManager.LoadAsset(DataConstants.EnvironmentDataSo); + if (atlas == null) continue; + + var count = atlas.spriteCount; + if (count == 0) continue; + + var sprites = new Sprite[count]; + atlas.GetSprites(sprites); - List spriteAtlases = await AssetManager.LoadAssetsByLabel(DataConstants.AtlasLabel); - _spriteAtlas = new Dictionary(spriteAtlases.Count); - - foreach (var atlas in spriteAtlases) + foreach (var sprite in sprites) { - if (atlas == null) continue; - - var count = atlas.spriteCount; - if (count == 0) continue; - - var sprites = new Sprite[count]; - atlas.GetSprites(sprites); + if (sprite == null) continue; - foreach (var sprite in sprites) - { - if (sprite == null) continue; - - var key = sprite.name.Replace(CommonConstants.Clone, string.Empty).Trim(); - _spriteAtlas.TryAdd(key, sprite); - } + var key = sprite.name.Replace(CommonConstants.Clone, string.Empty).Trim(); + _spriteAtlas.TryAdd(key, sprite); } + } - IsInitialized = true; - } - catch (Exception e) - { - Debug.LogError($"So bind failed\n{e.Message}"); - } + IsInitialized = true; + } + + public void PostInit() + { + } public async Task WaitUntilInitialized() diff --git a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs index 6e2679279..847407daf 100644 --- a/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs +++ b/Assets/_DDD/_Scripts/GameFlow/GameFlowManager.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; -using UnityEngine.AddressableAssets; namespace DDD { @@ -19,24 +18,22 @@ public class GameFlowManager : Singleton, IManager public GameFlowDataSo GameFlowDataSo; public GameFlowSceneMappingSo GameFlowSceneMappingSo; public List FlowHandlers = new List(); - - public void Init() + + public void PreInit() { GameFlowDataSo.CurrentGameState = GameFlowState.None; } + public Task Init() + { + return Task.CompletedTask;; + } + public void PostInit() { - try + if (IsGameStarted() == false) { - if (IsGameStarted() == false) - { - ChangeFlow(GameFlowState.ReadyForRestaurant); - } - } - catch (Exception e) - { - Debug.LogWarning(e); + ChangeFlow(GameFlowState.ReadyForRestaurant); } } @@ -65,10 +62,15 @@ private void EndCurrentFlow() } - private void ReadyNewFlow(GameFlowState newFlowState) + private async void ReadyNewFlow(GameFlowState newFlowState) { GameFlowDataSo.CurrentGameState = newFlowState; + foreach (var handler in FlowHandlers) + { + await handler.OnReadyNewFlow(newFlowState); + } + OpenFlowScene(newFlowState); StartFlow(); diff --git a/Assets/_DDD/_Scripts/GameFramework/FadeManager.cs b/Assets/_DDD/_Scripts/GameFramework/FadeManager.cs index ff7a3f6b8..288b8f1ce 100644 --- a/Assets/_DDD/_Scripts/GameFramework/FadeManager.cs +++ b/Assets/_DDD/_Scripts/GameFramework/FadeManager.cs @@ -13,12 +13,17 @@ public class FadeManager : Singleton, IManager private float _fadeInDuration = 1f; private CanvasGroup _canvasGroup; - - public void Init() + + public void PreInit() { _canvasGroup = GetComponent(); } + public Task Init() + { + return Task.CompletedTask;; + } + public void PostInit() { _canvasGroup.alpha = 0f; diff --git a/Assets/_DDD/_Scripts/GameFramework/GameManager.cs b/Assets/_DDD/_Scripts/GameFramework/GameManager.cs index 5e14991f2..c6579dfc5 100644 --- a/Assets/_DDD/_Scripts/GameFramework/GameManager.cs +++ b/Assets/_DDD/_Scripts/GameFramework/GameManager.cs @@ -10,7 +10,7 @@ public class GameManager : Singleton private List _managerInstances; - protected void Start() + protected async void Start() { base.OnAwake(); @@ -24,7 +24,7 @@ protected void Start() // 매니저 초기화 _managerInstances = new List(_managerDefinitionSo.ManagerClasses.Count); - + foreach (var managerObject in _managerDefinitionSo.ManagerClasses) { var managerInstance = Instantiate(managerObject); @@ -33,7 +33,15 @@ protected void Start() _managerInstances.Add(managerInstance); if (managerInstance is IManager manager) { - manager.Init(); + manager.PreInit(); + } + } + + foreach (var managerInstance in _managerInstances) + { + if (managerInstance is IManager manager) + { + await manager.Init(); } } foreach (var managerInstance in _managerInstances) diff --git a/Assets/_DDD/_Scripts/GameFramework/IManager.cs b/Assets/_DDD/_Scripts/GameFramework/IManager.cs index 9d067bd12..12a69caba 100644 --- a/Assets/_DDD/_Scripts/GameFramework/IManager.cs +++ b/Assets/_DDD/_Scripts/GameFramework/IManager.cs @@ -1,8 +1,11 @@ +using System.Threading.Tasks; + namespace DDD { public interface IManager { - void Init(); + void PreInit(); + Task Init(); void PostInit(); } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs index ef559c9d9..18d84245f 100644 --- a/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs +++ b/Assets/_DDD/_Scripts/GameFramework/Scene/SceneManager.cs @@ -23,14 +23,14 @@ public class SceneManager : Singleton, IManager private SceneInstance _currentSceneInstance; public Action OnSceneChanged; - - public void Init() + + public void PreInit() { Array sceneTypeArray = Enum.GetValues(typeof(SceneType)); _loadedScenes = new Dictionary(sceneTypeArray.Length); } - public async void PostInit() + public async Task Init() { try { @@ -46,6 +46,11 @@ public async void PostInit() Debug.LogWarning($"Scene preload failed\n{e}"); } } + + public void PostInit() + { + + } public SceneInstance GetSceneInstance(SceneType sceneType) => _loadedScenes[sceneType]; diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayerSo.cs similarity index 79% rename from Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs rename to Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayerSo.cs index 2fc6891b4..49664b737 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayerSo.cs @@ -3,8 +3,8 @@ namespace DDD { - [CreateAssetMenu(fileName = "CreateRestaurantPlayer", menuName = "GameFlow/CreateRestaurantPlayer")] - public class CreateRestaurantPlayer : GameFlowTask + [CreateAssetMenu(fileName = "CreateRestaurantPlayerSo", menuName = "GameFlow/CreateRestaurantPlayerSo")] + public class CreateRestaurantPlayerSo : GameFlowTask { [SerializeField] private Vector3 _spawnPosition; diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayerSo.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayer.cs.meta rename to Assets/_DDD/_Scripts/RestaurantCharacter/CreateRestaurantPlayerSo.cs.meta diff --git a/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs b/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs index f1a449a95..0d2feb139 100644 --- a/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs +++ b/Assets/_DDD/_Scripts/RestaurantController/RestaurantController.cs @@ -7,15 +7,21 @@ public class RestaurantController : Singleton, IManager, I { private RestaurantEnvironmentState _restaurantEnvironmentState; public RestaurantEnvironmentState RestaurantEnvironmentState => _restaurantEnvironmentState; - - // TODO : GameManager에 등록되게 So에 추가해주세요. - - public void Init() + + private const string CreateRestaurantPlayerSo = "CreateRestaurantPlayerSo"; + private const string CreateEnvironmentSo = "CreateEnvironmentSo"; + + public void PreInit() { LoadOrCreateRestaurantState(); RegisterFlowHandler(); } + public Task Init() + { + return Task.CompletedTask;; + } + public void PostInit() { GenerateDummyEnvironmentProps();// XXX : DUMMY! REMOVE THIS @@ -29,7 +35,7 @@ private void RegisterFlowHandler() private void LoadOrCreateRestaurantState() { // TODO : Load states from saved files. if none, create them. - _restaurantEnvironmentState = new RestaurantEnvironmentState(); + _restaurantEnvironmentState = ScriptableObject.CreateInstance(); } private void GenerateDummyEnvironmentProps() @@ -58,19 +64,17 @@ private void GenerateDummyEnvironmentProps() } - public Task OnReadyNewFlow(GameFlowState newFlowState) + public async Task OnReadyNewFlow(GameFlowState newFlowState) { if (newFlowState == GameFlowState.ReadyForRestaurant) { - CreateRestaurantPlayer createRestaurantPlayerJob = new CreateRestaurantPlayer(); - CreateEnvironment createEnvironmentJob = new CreateEnvironment(); - var playerHandle = createRestaurantPlayerJob.OnReadyNewFlow(newFlowState); - var propHandle = createEnvironmentJob.OnReadyNewFlow(newFlowState); + CreateRestaurantPlayerSo createRestaurantPlayerSoJob = await AssetManager.LoadAsset(CreateRestaurantPlayerSo); + CreateEnvironmentSo createEnvironmentSoJob = await AssetManager.LoadAsset(CreateEnvironmentSo); + var playerHandle = createRestaurantPlayerSoJob.OnReadyNewFlow(newFlowState); + var propHandle = createEnvironmentSoJob.OnReadyNewFlow(newFlowState); // Combine handles and return it - return Task.WhenAll(playerHandle, propHandle); + await Task.WhenAll(playerHandle, propHandle); } - - return Task.CompletedTask; } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironmentSo.cs similarity index 65% rename from Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs rename to Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironmentSo.cs index cebb28c5b..7be7ac65c 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironmentSo.cs @@ -3,8 +3,8 @@ namespace DDD { - [CreateAssetMenu(fileName = "CreateEnvironment", menuName = "GameFlow/CreateEnvironment")] - public class CreateEnvironment : GameFlowTask + [CreateAssetMenu(fileName = "CreateEnvironmentSo", menuName = "GameFlow/CreateEnvironmentSo")] + public class CreateEnvironmentSo : GameFlowTask { public override async Task OnReadyNewFlow(GameFlowState newFlowState) { @@ -13,8 +13,7 @@ public override async Task OnReadyNewFlow(GameFlowState newFlowState) var props = RestaurantController.Instance.RestaurantEnvironmentState.RestaurantEnvironmentProps; foreach (var prop in props) { - var restaurantEnvironment = - Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); + var restaurantEnvironment = Instantiate(baseRestaurantEnvironmentPrefab).GetComponent(); restaurantEnvironment.Initialize(prop); } } diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironmentSo.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironment.cs.meta rename to Assets/_DDD/_Scripts/RestaurantEnvironment/CreateEnvironmentSo.cs.meta