본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(11) - 2D 플랫포머 게임 만들기(6)

by jyppro 2023. 4. 30.

2D 플랫포머 만들기(6)

이전시간에는 프리팹에 대해 알아보았습니다. 이번엔 저번에 알게된 프리팹을 실제로 예제에 적용하여 3초마다 플레이어가 움직일 수 있는 공간에 랜덤하게 코인 오브젝트가 생성되도록 제너레이터 스크립트를 작성 하겠습니다.

 

 

프리팹 사용

저번에 프리팹을 만들었고, 이제는 사용을 해야 합니다. 우선 프리팹을 사용하려면 특정함수를 사용해야 합니다.

바로 Instantiate() 입니다. 이 함수는 프리팹을 게임에 생성하는 역할을 해줍니다. 하지만 함수를 사용하려면 해당 함수가 사용된 스크립트에 프리팹을 전달해주어야 합니다. 프리팹의 전달은 아주 간단합니다. 사진으로 설명하겠습니다.

 

Step 1

우선 빈 오브젝트를 생성하고 Generator 라고 이름을 붙혀주었습니다. 이곳에 저희가 만든 스크립트를 적용할 것입니다.

 

하이어라키-창
제너레이터 만들기

 

Step 2

Generator에게 만든 스크립트를 적용시킵니다. 스크립트를 적용한 후 인스펙터 창을 통해 보면, Coin Prefab 부분에 None으로 비어있는 모습이 보입니다.

제너레이터-인스펙터-창
제너레이터 인스펙터 창

 

Step 3

해당 부분에 기존에 생성했던 Coin 프리팹을 드래그 앤 드롭을 통해 적용시켜 줍니다.

프리팹-적용
프리팹 적용하기

 

Step 4

적용한 뒤, 실행시키면 잘 작동하는 것을 확인할 수 있고, 하이어라키 창에 Clone으로 계속 생성되는 것을 볼 수 있습니다.

프리팹-사용-및-생성
프리팹 사용 및 생성

 

앞서 설명드린 것은 이 프로젝트 뿐만 아니라 다른 프로젝트에서도 프리팹을 사용하는 방법에 대해 설명드린 겁니다. 저희는 아직 스크립트를 작성하지 않았으니 이제 스크립트를 작성해 봅시다.

 

CoinSpawner 스크립트 작성

저는 코인 프리팹을 랜덤한 위치에 3초마다 생성되게 스크립트를 작성할 것입니다. 하지만, 랜덤위치의 범위를 설정해 주지 않으면, 플레이어가 닿지 않는 곳에도 계속해서 오브젝트가 생성될 것입니다. 그러니 먼저 플레이어의 Transform을 통해 플레이어가 움직일 수 있는 범위를 측정해 줍니다. 저는 X축은 -4에서 5, Y축은 0에서 3정도로 하였습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoinSpawner : MonoBehaviour
{
    public GameObject coinPrefab;
    
    void Start()
    {
        InvokeRepeating("SpawnCoin", 0f, 3f); // 3초마다 SpawnCoin 함수 실행
    }
    
    void SpawnCoin()
    {
        float randomX = Random.Range(-4f, 5f);
        float randomY = Random.Range(0f, 3f);
        Vector2 spawnPosition = new Vector2(randomX, randomY);
        
        Instantiate(coinPrefab, spawnPosition, Quaternion.identity);
    }
}

 

이렇게 코드를 작성하면, CoinSpawner가 완성됩니다. 이것을 이제 앞서 설명드린 것처럼 빈 오브젝트를 생성한 후, 스크립트를 추가하고, 프리팹을 적용시켜 실행하면 제대로 작동하는 것을 볼 수 있습니다.

 

생성된-프리팹들
계속 생성되는 프리팹 오브젝트

 

게임화면에서 코인들을 전부 먹으면 점수도 제대로 반영되는 모습을 확인하실 수 있습니다.

 

코인을-전부-먹은-점수
점수가 제대로 반영되는 모습

처음에 플레이어가 닿을 수 있는 거리까지만 생성되게 해주었기 때문에 전부 다 먹을 수 있습니다.

 

 

<Next>

오늘은 이전에 생성한 프리팹을 사용하여 랜덤한 위치에 3초마다 코인 오브젝트를 생성하는 것을 해보았습니다. 다음에는 이 프리팹 랜덤생성과 움직임을 결합하여, 좀 더 플랫포머 게임다운 방식으로 발전시킬 것 입니다. 감사합니다.