Unity_개발일지_40

홍신영·2024년 12월 16일
0

Unity

목록 보기
42/62

데이터 연결하는 부분에 문제가 생겼다.
던전 데이터를 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;
            }
        }
    }
}
profile
게임 클라이언트 개발자

0개의 댓글