유니티

SpawnSystem 구현

잼잼재미 2024. 3. 21. 05:28

 

  • 각 스테이지 별로 직접 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