71 lines
2.2 KiB
C#
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();
|
|
}
|
|
} |