TigerProject/Assets/Scripts/MapGenerator.cs
qoralstmd6825 7449deee12 Map Generator Added
맵 생성기 제작했습니다.
2026-01-26 18:07:09 +09:00

71 lines
2.2 KiB
C#

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<GameObject> chunkQueue = new Queue<GameObject>();
[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<MapChunk>();
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();
}
}