데이터 연결하는 부분에 문제가 생겼다.
던전 데이터를 json으로 불러와 연결해 주는 작업을 하는데 ..
잘 안되네,,
맵 데이터에는 맵 스폰위치, 몬스터 스폰 위치, 몬스터 스폰 카운트 정보를 가지고 있게 해주고,
transform을 인스펙터에 연결해주어 던전 매니저에서 전달해주고 스폰해주도록 구현예정인데
쉽지않다.
using System.Collections.Generic;
using UnityEngine;
public class DungeonManager : MonoBehaviour
{
private SpawnManager spawnManager;
public PuzzleManager PuzzleManager { get; private set; }
private int curStage;
// 매니저 파괴
private void OnDestroy()
{
if (spawnManager != null) Destroy(spawnManager.gameObject);
if (PuzzleManager != null) Destroy(PuzzleManager.gameObject);
spawnManager = null;
PuzzleManager = null;
GameManager.Instance.ExitDungeon();
}
public void InitializeDungeon(int stage)
{
spawnManager = new GameObject("SpawnManager").AddComponent<SpawnManager>();
PuzzleManager = new GameObject("PuzzleManager").AddComponent<PuzzleManager>();
curStage = stage;
//LoadDungeonData();
SpawnStageObjects(curStage);
Debug.Log("현재 스테이지: " + curStage);
}
private void SpawnStageObjects(int stage)
{
var dungeonObjects = DataManager.Instance.DungeonDB.Dungeon;
var curDungeon = dungeonObjects.FindAll(dungeon => dungeon.Stage == stage); //현재 스테이지를 가지고 있는지
var stageInfo = curDungeon.Find(dungeon => dungeon.ObjectType == "Map"); //위 중에서 맵 타입인지
var monsterInfo = curDungeon.FindAll(dungeon => dungeon.ObjectType == "Monster"); //
if (stageInfo == null) return;
GameObject prefab = ResourceManager.Instance.LoadAsset<GameObject>($"Map{stage}", eAssetType.Prefab);
if (prefab == null)
{
Debug.Log("프리팹 없음");
}
GameObject instance = Instantiate(prefab, transform);
MapData mapData = instance.GetComponent<MapData>();
foreach (var monster in monsterInfo) //여러개여서 foreach
{
mapData.SetData(monster);
}
}
public void StageClear()
{
Debug.Log("스테이지 클리어!");
Cursor.lockState = CursorLockMode.None;
UIManager.Instance.Show<UIPopupStageClear>();
}
}
다음은 맵 데이터 이다.
using UnityEngine;
public class MapData : MonoBehaviour
{
public Transform monsterSpawnPoint;
public void SetData(DungeonData data)
{
if (monsterSpawnPoint == null)
{
Debug.Log("위치 잡아줘야됌");
return;
}
// 데이터에서 몬스터 위치를 가져와 monsterSpawnPoint를 기준으로 설정
// Vector3 spawnPosition = new Vector3(data.MonsterPosition[0], data.MonsterPosition[1], data.MonsterPosition[2]);
// 던전데이터 -> 몬스터 키값을 가져온다 -> 몬스터 키값으로 몬스터 SO를 가져온다 -> 몬스터 SO의 이름 가지고 생성하다.
// 몬스터 위치를 부모 기준으로 설정
GameObject monster = ResourceManager.Instance.LoadAsset<GameObject>($"BigBlink", eAssetType.Prefab);
for (int i = 0; i < data.Count; i++)
{
if (monster != null)
{
GameObject obj = Instantiate(monster, monsterSpawnPoint.position, Quaternion.identity, monsterSpawnPoint);
obj.transform.localPosition = Vector3.zero;
}
}
}
}