Unity_개발일지_39

홍신영·2024년 12월 13일
0

Unity

목록 보기
41/62

오늘은 스테이지 6개를 만들어야해서,, 오전 후다닥 만들었다.
스테이지를 프리팹으로 만들어놓고, 엑셀에서 위치, 회전, 스케일 등을 적용해준다.
6 스테이지는 보스 스테이지로 할 예정이다.

그리고 ui 디자인을 꾸며보았다.
ui는 uimanager를 이용해서 연결해주었다.

이제 던전 매니저 리펙토링을 해보자.
로드하는 부분은 데이터 쪽에서 처리하도록 생성은 던전에서

던전매니저에서 스폰하는 부분이다.

private void SpawnStageObjects(int stage)
{
    var dungeonObjects = DataManager.Instance.DungeonDB.Dungeon;
    foreach(var obj in dungeonObjects)
    {
        if (obj.Stage != stage) continue;

        GameObject prefab = Resources.Load<GameObject>($"Prefabs/{obj.ObjectName}");
        if(prefab == null)
        {
            Debug.Log("프리팹 없음");
            continue;
        }
        for(int i = 0; i < obj.Count; i++)
        {
            GameObject instance = Instantiate(prefab, transform);
            instance.transform.position = new Vector3(obj.Position[0], obj.Position[1], obj.Position[2]);
            instance.transform.eulerAngles = new Vector3(obj.Rotation[0], obj.Rotation[1], obj.Rotation[2]);
            instance.transform.localScale = new Vector3(obj.Scale[0], obj.Scale[1], obj.Scale[2]);
        }            
    }
}

데이터는 데이터매니저에서 리스트로 저장한 던전 데이터를 넣어주고, foreach문으로 리스트에 있는 오브젝트를 가져와준다. 여기에 조건문을 달아 해당 스테이지에 있는 데이터만 가져오도록하였다.
여기서 액셀에 저장한 몬스터와 맵의 위치가 불러와진다.
리소스경로에서 가져와주고 액셀 입력한 수만큼 스폰한다. 위치, 스케일, 회전도 마찬가지.

 private void LoadData()
 {
     {
         itemData_List = new ItemDataList();
         TextAsset data = ResourceManager.Instance.LoadAsset<TextAsset>("Item", eAssetType.JsonData);
         MetaItemDataList metaItemDataList = JsonUtility.FromJson<MetaItemDataList>(data.text);

         itemData_List.SetData(metaItemDataList.Item);
     }

     {
         monsterDataList = new MonsterDataList();

         TextAsset data = ResourceManager.Instance.LoadAsset<TextAsset>("MonsterData", eAssetType.JsonData);
         monsterDataList = JsonUtility.FromJson<MonsterDataList>(data.text);
         monsterDataList.SetData(monsterDataList.MonsterData);
     }

     {
         TextAsset data = ResourceManager.Instance.LoadAsset<TextAsset>("Player", eAssetType.JsonData);
         playerDataList = JsonUtility.FromJson<PlayerDataList>(data.text);
     }

     {
         TextAsset data = ResourceManager.Instance.LoadAsset<TextAsset>("Dungeon", eAssetType.JsonData);
         if (data != null)
         {
             dungeonDataList = JsonUtility.FromJson<DungeonDataList>(data.text);
         }

     }
 }

데이터 로드는 데이터 매니저에서 해줌으로써 일관성과 책임분리를 해주었다.

profile
게임 클라이언트 개발자

0개의 댓글