기존의 몬스터가 랜덤 생성되던걸 조금 변경하였다.
https://velog.io/@yangju058/타워디펜스게임-2.-몬스터-이동-랜덤-위치-생성
원래는 몬스터의 종류가 1개 였지만, 이제 여러 종류의 몬스터를 정의해두었기 때문에 일정한 규칙을 가지고 생성되야한다.
-> 처음부터 보스 몬스터가 나오면 안되잖아요 그쵸?
자료구조 Queue를 사용하여 구현하였다.

Enqueue)

Dequeue)코드를 짜다가 해당 오류를 발견했다

monsterQueue.Count != 0 조건 추가
Queue 자료구조는 FIFO 선입선출 구조이기 때문에, 낮은 레벨의 몬스터부터 빼서 생성할 수 있다
큐에 들어간 몬스터 객체들은 모두 본인의 정보가 저장된 스크립트를 가지고 있다
-> 따라서, 몬스터 객체들이 각각 다른 스탯을 가지고 있는 것 (MonsterStat 스크립트)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonsterSpawner : MonoBehaviour
{
public Transform[] spawnPoints; // 스폰위치 배열
//public GameObject Monster;
[SerializeField] GameObject level1Monster;
[SerializeField] GameObject level2Monster;
[SerializeField] GameObject bossMonster;
// 몬스터를 순서별로 저장할 큐
Queue<GameObject> monsterQueue = new Queue<GameObject>();
private void Awake()
{
// level 1 몬스터 5개
for(int i = 0; i < 5; i++)
{
monsterQueue.Enqueue(level1Monster);
}
// level 2 몬스터 4개
for(int i = 0; i < 4; i++)
{
monsterQueue.Enqueue(level2Monster);
}
// 보스 몬스터 1개
monsterQueue.Enqueue(bossMonster);
MonsterCount.Instance.monsterCount = monsterQueue.Count;
}
private void Start()
{
// SpawnMonster함수를 2초후에 5초마다 실행
InvokeRepeating("SpawnMonster", 2, 5);
}
// 스폰 랜덤 위치 몬스터 생성
void SpawnMonster()
{
int ran = Random.Range(0, spawnPoints.Length);
if(monsterQueue.Count != 0)
{
// 큐에서 하나씩 빼기
GameObject monsterSpawn = monsterQueue.Dequeue();
GameObject myMonster =
Instantiate(monsterSpawn, spawnPoints[ran].position, Quaternion.identity);
myMonster.transform.SetParent(spawnPoints[ran]);
// 목적지 설정
var spawnPointComponent = spawnPoints[ran].GetComponent<SpawnPoint>();
if (spawnPointComponent != null)
{
myMonster.GetComponent<MonsterController>().FinalDestination = spawnPointComponent.Destination;
}
else
{
Debug.LogError("SpawnPoint 컴포넌트를 찾을 수 없습니다.");
}
//MonsterCount.Instance.IncreaseCount(); // 몬스터 카운트 증가
}
}
}
결과적으로 level1 몬스터가 5마리, level2 몬스터가 4마리, 보스 몬스터 1마리가 순서대로 생성된다