[UNITY] 적 자동 생성자(Respawner) 만들기 Glitch Garden, (Feat. Plant vs Zombie)

     


최근에 Udemy 에서 Unity 인강을 들으면서 게임을 만들고 있습니다.

일단 인강 스타일이 이번 강의에 무엇을 할지 정리하고 요이~ 땅 하는 스타일인데, 처음에 무엇을 할지 정리할 때 스스로 한번 그것을 만들어보고 인강을 보고 인강과 비교해서 뭐가 좋은지 비교하는 형식으로 진행하고 있습니다. 뭔가 내가 한 거랑 항상 다르지만.... ㅎ_ㅎ


아무튼 이번에 Glitch Garden이라고 Glitch라는 옛날 게임 소스를 가지고 Plant vs Zombie류의 Defense게임을 만들고 있습니다. 인강중에 적들 (악어)를 자동으로 생성하는 자동 생성자 (Respawner)를 만드는데 인강을 듣기전에 미리 만들어 봤습니다.


일단 Respawner가 해야 하는 것을 정리해보면


1. t시간 마다 자동으로 객체를 생성

2. 지정된 위치중 랜덤으로 한곳에 생성 (Plant vs Zombie의 라인)

3. 무한 루프


이 정도다. 일단 Coroutine을 사용해야 하는 것은 당연할 것 같고, t시간을 정하는 건 Coroutine에서 WaitTimeSecond를 이용하고, 위치를 랜덤으로 하는건 Instantiate 메소드의 인자값을 이용하면 될 것 같다.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AttackerRespawner : MonoBehaviour {

    [SerializeField] int maxYLocation = 5;
    [SerializeField] int minYLocation = 1;
    [SerializeField] int yLocation;
    [SerializeField] float minRespawnTime;

    [SerializeField] int respawnXLocation = 10;
    [SerializeField] GameObject lizard;

    // Use this for initialization
    void Start () {
        StartCoroutine(Respawn());
    }

    IEnumerator Respawn()
    {
        while (true)
        {
            yield return StartCoroutine(RespawnCrocodile());
        }
    }

    IEnumerator RespawnCrocodile()
    {
        yield return new WaitForSeconds(Random.Range(1.0f, 5.0f));
        yLocation = Random.Range(minYLocation, maxYLocation);
        Instantiate(lizard, new Vector3(respawnXLocation, yLocation), Quaternion.identity);

    }
}



요렇게?




저기 위에서 다이아몬드 흰색으로 표기한 곳이 월드 좌표로 Y값이 1~5입니다. 랜덤으로 1~5값을 줘서 튀어나오게 만들었음!



실제로 돌아가면 위처럼 됩니다. 하 근데 이노무 악어 놈들이... 칸에 맞게 안 나옴 ㅠㅠ

스프라이트 앵커가 Center로 되어있는데 Sprite 사이즈랑 한 칸 사이즈랑 달라서... 앵커를 수정하면 될 것 같은데, 인강에서는 어떻게 처리하는지 보고싶어서 냅둠.


이렇게 코딩하고 인강을 봤더니... 더 쉽게 만드는 법이 있었다... 

나는 코루틴을 두 개 만들고 Start()에서 1번 코루틴을 호출하면 1번 코루틴이 2번 코루틴을 무한루프로 호출하는 방식을 사용했는데... (나름 혼자 만들어보고 감탄했으나...)




인강에서는 Start()를 코루틴으로 만듬 ... ㅋㅋㅋㅋㅋㅋ

아니 Start도 코루틴이 되는구나... 충격.


그리고 나는 오브젝트를 최소화하려고 하나만 만들고 5개의 자리에 랜덤으로 생성하게 만들었는데, 인강에서는 한줄 생성하는 오브젝트를 5개 만듬... 흠... 이건 내가 더 잘한 듯!

반응형

댓글

Designed by JB FACTORY