내일배움캠프/TIL

[내배캠][Unity6기][TIL] 다중 스폰 포인트

binary는 호남선 2025. 1. 7. 22:28

기존에 1개의 스폰포인트에서 인간이 생성되도록 설계했는데, 스테이지에 스폰포인트가 추가되며 로직을 확장성 있게 수정하였다.

public class StageManager : SingletonBase<StageManager>
{
    public List<Transform> StartPointList { get; private set; }
    // 스테이지의 시작점과 종료지점 캐싱
    private void SetPointInfo()
    {
        StartPointList = new List<Transform>();
        GameObject[] spawnPoints = GameObject.FindGameObjectsWithTag("HumanSpawnPoint");
        if (spawnPoints == null || spawnPoints.Length == 0)
        {
            Debug.LogAssertion("Startpoints not found");
            return;
        }
        foreach (GameObject point in spawnPoints)
        {
            StartPointList.Add(point.transform);
        }
    }
}
public class HumanSpawner : MonoBehaviour
{
    private List<Transform> _spawnPoints = new List<Transform>();
    
    private void Start()
    {
        _spawnPoints = StageManager.Instance.StartPointList;
    }
    
    private void SpawnHuman(int waveIdx, int humanId)
    {   
        int spawnPointCount = _spawnPoints.Count;
        for (int i = 0; i < spawnPointCount; i++)
        {
            Human human = PoolManager.Instance.SpawnFromPool<Human>(humanType, _spawnPoints[i].transform.position, quaternion.identity);
            human.controller.SpawnedPointIdx = i;    
            human.SpawnedWaveIdx = waveIdx;
        }
    }
}