- 각 스테이지 별로 직접 Spawn하는 Enemy와 Spawn 시간을 입력해서 게임 난이도를 조절 가능
구현 방법
1. SpawnSystem 생성
빈 게임오브젝트로 SpawnSystem을 추가하고, 자식으로 빈 게임오브젝트로 Spawn 위치를 추가
2. 스크립트 작성
SpawnSystem
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnSystem : MonoBehaviour
{
[System.Serializable]
public struct StageInfo
{
public int Stage;
public string[] enemys; // enemy + 생성되는 시간 입력 ex) "Snail 5"
}
public List<StageInfo> Stages;
private int _currentStage;
private string _enemy;
private int _spawnTime;
[SerializeField] private Transform _spawnLeft;
[SerializeField] private Transform _spawnRigth;
private void Start()
{
_currentStage = GameManager.I.DataManager.GameDataSO.Stage;
for (int i = 0; i < Stages[_currentStage - 1].enemys.Length; i++)
{
string[] words = Stages[_currentStage - 1].enemys[i].Split(' ');
_enemy = words[0];
_spawnTime = int.Parse(words[1]);
StartCoroutine(COSpawnEnemy(_enemy, _spawnTime));
}
}
IEnumerator COSpawnEnemy(string enemy, int time)
{
while (true)
{
yield return new WaitForSeconds(time);
int random = Random.Range(0, 2);
if (random == 0) GameManager.I.ObjectPoolManager.InstantiateEnemy(enemy, _spawnLeft.position);
else GameManager.I.ObjectPoolManager.InstantiateEnemy(enemy, _spawnRigth.position);
}
}
}
3. 스크립트 추가 및 인스펙터 연결
4. 사용 방법
- Stages에 Stage 순서대로 추가 (무조건 순서대로 추가해야 함)
- Stage에 적용 Stage 입력 (사용하는 코드는 없지만 햇갈리지 않게)
- Enemys에 Stage에 등장할 Enemy 수만큼 추가
- Enemy 이름 + Spawn 시간을 함께 입력 ex) Snail 10 -> 10초당 한마리 씩 좌, 우 중, 랜덤으로 생성
구현 설명
- 각각 스테이지 별로 적의 종류와 스폰 시간을 인스펙터 창에서 설정하여 게임 난이도 조절 가능
- Dictionary를 사용하려 했으나, 인스펙터창에서는 Dictionary를 사용할 수 없기 때문에 string 사용
- string 배열과 int 배열을 따로 설정해도 되지만, 인스펙터 창에서 보기가 어려움
- string 배열에서 적의 이름과 스폰 시간을 함께 입력
- 띄어쓰기를 기준으로 Split 함수를 통해 적의 이름과 스폰 시간을 두개의 string으로 나누고, 스폰 시간은 int 값으로 형변환
- 인스펙터 창에서 입력한 적의 이름과 스폰 시간을 매개 변수로 사용해서 코루틴을 실행, 스폰을 반복
'유니티' 카테고리의 다른 글
화면 깜빡이기 (0) | 2024.03.27 |
---|---|
2D 화살 구현 (포물선 운동) (0) | 2024.03.25 |
충돌 무시 (LayerCollisionMatrix) (0) | 2024.03.21 |
Resources 폴더 (0) | 2024.03.19 |
롱클릭 구현 (Event Trigger) (0) | 2024.03.19 |