diff --git a/BlueWater/Assets/02.Scripts/Character/Crewmate/Crewmate.cs b/BlueWater/Assets/02.Scripts/Character/Crewmate/Crewmate.cs index ad4b89be6..880bbcdda 100644 --- a/BlueWater/Assets/02.Scripts/Character/Crewmate/Crewmate.cs +++ b/BlueWater/Assets/02.Scripts/Character/Crewmate/Crewmate.cs @@ -93,6 +93,8 @@ namespace BlueWaterProject [SerializeField] protected bool isAttacking; // 일반 변수 + public int CrewmatePrefabIndex { get; set; } = -1; + protected Vector2 movementInput; protected bool usedNormalAttackCoroutine; protected WaitForSeconds waitAtkCooldown; diff --git a/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs b/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs new file mode 100644 index 000000000..3603b38d5 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using UnityEngine; + +// ReSharper disable once CheckNamespace +namespace BlueWaterProject +{ + [CreateAssetMenu(fileName = "CrewmateData", menuName = "ScriptableObjects/CrewmateData", order = 1)] + public class CrewmateDataSo : ScriptableObject + { + public List crewmateList; + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs.meta b/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs.meta new file mode 100644 index 000000000..1b95acca2 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/CrewmateDataSo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c04e61fd913bab44a834a1586e2ada3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset b/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset new file mode 100644 index 000000000..8cad18ccc --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c04e61fd913bab44a834a1586e2ada3c, type: 3} + m_Name: CrewmateData + m_EditorClassIdentifier: + crewmateList: [] diff --git a/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset.meta b/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset.meta new file mode 100644 index 000000000..13c0508d4 --- /dev/null +++ b/BlueWater/Assets/02.Scripts/Data/So/CrewmateData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1804f9de21fdf15448bb3a67d7b1c7c8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlueWater/Assets/02.Scripts/GameManager.cs b/BlueWater/Assets/02.Scripts/GameManager.cs index 651f5ab6c..5294c796a 100644 --- a/BlueWater/Assets/02.Scripts/GameManager.cs +++ b/BlueWater/Assets/02.Scripts/GameManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; diff --git a/BlueWater/Assets/02.Scripts/SpawnController.cs b/BlueWater/Assets/02.Scripts/SpawnController.cs index a545db1f8..10a826e28 100644 --- a/BlueWater/Assets/02.Scripts/SpawnController.cs +++ b/BlueWater/Assets/02.Scripts/SpawnController.cs @@ -18,7 +18,7 @@ namespace BlueWaterProject [Title("Crewmate 생성")] [InfoBox("$CrewmateIndexInfoMessage")] - [SerializeField] private int crewmateIndex; + [SerializeField] private int crewmatePrefabIndex; private Collider[] colliders = new Collider[MAX_COLLIDER]; @@ -102,13 +102,13 @@ namespace BlueWaterProject GameManager.Inst.SetCurrentInIslandPlayer(inIslandPlayer); } - [DisableIf("@crewmateIndex >= GameManager.Inst.CrewmatePrefabList.Count || crewmateIndex < 0")] + [DisableIf("@crewmatePrefabIndex >= GameManager.Inst.CrewmatePrefabList.Count || crewmatePrefabIndex < 0")] [Button("Crewmate 추가")] - private void AddCrewmate() + public void AddCrewmate() { if (!GameManager.Inst.CurrentInIslandPlayer.GameObject) return; - if (crewmateIndex >= GameManager.Inst.CrewmatePrefabList.Count || crewmateIndex < 0) + if (crewmatePrefabIndex >= GameManager.Inst.CrewmatePrefabList.Count || crewmatePrefabIndex < 0) { print("존재하지 않는 인덱스입니다."); return; @@ -124,8 +124,9 @@ namespace BlueWaterProject if (size != 0) continue; - var crewmate = Instantiate(GameManager.Inst.CrewmatePrefabList[crewmateIndex], spawnPos, - GameManager.Inst.CrewmatePrefabList[crewmateIndex].transform.rotation, spawnLocation); + var crewmate = Instantiate(GameManager.Inst.CrewmatePrefabList[crewmatePrefabIndex], spawnPos, + GameManager.Inst.CrewmatePrefabList[crewmatePrefabIndex].transform.rotation, spawnLocation); + crewmate.CrewmatePrefabIndex = crewmatePrefabIndex; crewmate.gameObject.SetActive(true); GameManager.Inst.CurrentCrewmateList.Add(crewmate); @@ -134,5 +135,7 @@ namespace BlueWaterProject print("소환할 수 있는 자리가 없습니다."); } + + public void SetCrewmatePrefabIndex(int value) => crewmatePrefabIndex = value; } } \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/Ui/RestartPopupUi.cs b/BlueWater/Assets/02.Scripts/Ui/RestartPopupUi.cs index 4bd655a5f..62530ebfe 100644 --- a/BlueWater/Assets/02.Scripts/Ui/RestartPopupUi.cs +++ b/BlueWater/Assets/02.Scripts/Ui/RestartPopupUi.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.SceneManagement; @@ -7,11 +8,39 @@ namespace BlueWaterProject { public class RestartPopupUi : MonoBehaviour { + private List currentCrewmateList; + + private void OnEnable() + { + // 씬이 로드될 때마다 OnSceneLoaded 메서드를 호출합니다. + SceneManager.sceneLoaded += OnSceneLoaded; + } + + private void OnDisable() + { + // 이 오브젝트가 비활성화될 때 이벤트 핸들러를 제거합니다. + SceneManager.sceneLoaded -= OnSceneLoaded; + } + private void OnInteraction(InputValue value) { + currentCrewmateList = GameManager.Inst.CurrentCrewmateList; + var currentSceneIndex = SceneManager.GetActiveScene().buildIndex; SceneManager.LoadScene(currentSceneIndex); } + + private void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + // 로딩 이후에 실행되어야 하는 코드를 여기에 작성합니다. + var spawnController = FindAnyObjectByType(); + + foreach (var crewmate in currentCrewmateList) + { + spawnController.SetCrewmatePrefabIndex(crewmate.CrewmatePrefabIndex); + spawnController.AddCrewmate(); + } + } } } \ No newline at end of file