using System.Collections.Generic; using UnityEngine; public class MapGenerator : MonoBehaviour { [Header("맵 설정용")] [SerializeField] private GameObject[] mapChunkPrefab; [SerializeField] private GameObject startChunkPrefab; [SerializeField] private int mapChunkSize = 14; private float lateSpawnedChunkLocationY = 0; [Header("플레이어 설정")] [SerializeField] private Transform playerTransform; private Queue chunkQueue = new Queue(); [Header("적 설정")] [SerializeField] private GameObject[] groundEnemyPrefabs; [SerializeField] private int groundEnemyCount = 2; [SerializeField] private GameObject[] airEnemyPrefabs; [SerializeField] private int airEnemyCount = 1; private void Start() { playerTransform = GameObject.FindGameObjectWithTag("Player").transform; SpawnChunkPrefab(); SpawnChunkPrefab(); SpawnChunkPrefab(); } private void SpawnChunkPrefab() { if (mapChunkPrefab == null) return; GameObject spawnedChunkObj = chunkQueue.Count < 1 ? Instantiate(startChunkPrefab) : Instantiate(mapChunkPrefab[Random.Range(0, mapChunkPrefab.Length)]); spawnedChunkObj.transform.position = new Vector2(0, lateSpawnedChunkLocationY); chunkQueue.Enqueue(spawnedChunkObj); MapChunk mapChunk = spawnedChunkObj.GetComponent(); if (mapChunk != null) { bool isMirrored = Random.value > 0.5f; mapChunk.InitializeChunk(isMirrored); mapChunk.SpawnEnemies(groundEnemyPrefabs, groundEnemyCount, airEnemyPrefabs, airEnemyCount); } else { Debug.Log("Script 추가하기"); } lateSpawnedChunkLocationY -= mapChunkSize; } public void Update() { if (chunkQueue.Count < 3) return; float middleChunkY = lateSpawnedChunkLocationY + mapChunkSize; if (playerTransform.position.y <= middleChunkY) { RemoveAndSpawnNewChunk(); } } private void RemoveAndSpawnNewChunk() { GameObject removedChunk = chunkQueue.Dequeue(); Destroy(removedChunk); SpawnChunkPrefab(); } }