diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab index 40cdaf4d0..09f102b91 100644 --- a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab @@ -274,46 +274,6 @@ PrefabInstance: propertyPath: skeletonDataAsset value: objectReference: {fileID: 11400000, guid: 57e95ec929c09d64c9f85a40f849786a, type: 2} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalScale.x - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalScale.y - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalScale.z - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 @@ -326,10 +286,6 @@ PrefabInstance: propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1761643478070701343, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} - propertyPath: m_ConstrainProportionsScale - value: 1 - objectReference: {fileID: 0} - target: {fileID: 2182479135931305606, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3} propertyPath: m_Layer value: 6 diff --git a/Assets/_DDD/_Scripts/CameraSystem/CameraGameObject.cs b/Assets/_DDD/_Scripts/CameraSystem/CameraGameObject.cs index 7527a6413..ebf16598c 100644 --- a/Assets/_DDD/_Scripts/CameraSystem/CameraGameObject.cs +++ b/Assets/_DDD/_Scripts/CameraSystem/CameraGameObject.cs @@ -15,19 +15,6 @@ private void Awake() _cinemachineCamera = GetComponent(); } - private void Start() - { - CameraManager.Instance.RegisterCamera(this); - } - - private void OnDestroy() - { - if (CameraManager.Instance) - { - CameraManager.Instance.UnRegisterCamera(this); - } - } - public int GetPriority() => _cinemachineCamera.Priority; public void SetPriority(int newPriority) => _cinemachineCamera.Priority = newPriority; public void SetFollowTarget(Transform target) => _cinemachineCamera.Follow = target; diff --git a/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs b/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs index d687456ef..3754a53dc 100644 --- a/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs +++ b/Assets/_DDD/_Scripts/CameraSystem/CameraManager.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Sirenix.OdinInspector; using Unity.Cinemachine; +using UnityEngine; namespace DDD { @@ -10,13 +11,25 @@ public enum CameraType None = 0, RestaurantBaseCamera = 1 } - + public class CameraManager : Singleton, IManager { [ShowInInspector, ReadOnly] private Dictionary _cameraGameObjects = new(); - + private CinemachineBrain _cinemachineBrain; + private TaskCompletionSource _initializationTask = new(); + + private void OnDestroy() + { + foreach (var cameraGameObject in _cameraGameObjects.Values) + { + if (cameraGameObject) + { + UnRegisterCamera(cameraGameObject); + } + } + } public void PreInit() { @@ -25,12 +38,17 @@ public void PreInit() public Task Init() { - return Task.CompletedTask;; + return Task.CompletedTask; } public void PostInit() { - + var cameraGameObjects = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); + foreach (var cameraGameObject in cameraGameObjects) + { + RegisterCamera(cameraGameObject); + } + _initializationTask.SetResult(true); } public void RegisterCamera(CameraGameObject cameraGameObject) @@ -42,7 +60,7 @@ public void UnRegisterCamera(CameraGameObject cameraGameObject) { _cameraGameObjects.Remove(cameraGameObject.CameraType); } - + public void SwitchCamera(CameraType cameraType, CinemachineBlendDefinition.Styles blendStyle = CinemachineBlendDefinition.Styles.Cut, float blendDuration = 1f) { _cinemachineBrain.DefaultBlend = new CinemachineBlendDefinition(blendStyle, blendDuration); @@ -52,7 +70,17 @@ public void SwitchCamera(CameraType cameraType, CinemachineBlendDefinition.Style item.Value.SetPriority(newPriority); } } - - public CameraGameObject GetCameraGameObject(CameraType cameraType) => _cameraGameObjects[cameraType]; + + public async Task GetCameraGameObject(CameraType cameraType) + { + await _initializationTask.Task; + + if (_cameraGameObjects.TryGetValue(cameraType, out var cameraGameObject)) + { + return cameraGameObject; + } + + return null; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs index 82d75099d..0b44d6e17 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using UnityEngine; namespace DDD @@ -7,7 +8,15 @@ public class RestaurantPlayerCharacter : RestaurantCharacter protected override void Awake() { base.Awake(); + + _ = Initialize(); + } + + private async Task Initialize() + { PlayerManager.Instance.RegisterPlayer(gameObject); + var cameraObject = await CameraManager.Instance.GetCameraGameObject(CameraType.RestaurantBaseCamera); + cameraObject?.SetFollowAndLookAtTarget(transform); } } } \ No newline at end of file