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

게임개발 중급(63) - Monster Killer(25)

by jyppro 2023. 6. 27.

Monster Killer(25)

저번시간부로 스테이징을 대략적으로 완료했습니다. 이제부터는 재화시스템을 만들어 보겠습니다.

 

재화 시스템

개념은 간단합니다. 게임을 한번쯤 플레이 해보셨다면 아시겠지만, 거의 대부분의 게임에는 재화가 존재합니다. 여기서 말하는 재화는 흔히 골드와 같은 화폐가 주로 사용됩니다. 게임의 종류에 따라서 엄청나게 많은 다양한 종류의 재화를 활요하기도 하고, 간단한 몇가지의 재화만으로 모든 게임요소를 즐길 수 있게 만들기도 합니다. 저는 이 재화시스템에 기본이 되는 골드를 먼저 만들어 보겠습니다.

 

골드 만들기

먼저 제가 만들고 있는 게임에서는 기본 매커니즘이 플레이어가 몬스터를 잡아서 다음스테이지로 넘어가는 것입니다. 그렇다면 몬스터를 잡는 과정에서 골드를 획득할 수 있어야 합니다. 그리고 획득할 수 있는 골드의 양은 몬스터가 강해지는 만큼 동시에 가치가 상승해야 합니다. 그렇다면 가장 기초적인 방식으로 우선 구현해 보겠습니다.

 

Gold UI 만들기

우선 가장 간단한 텍스트 UI로 골드가 벌리는 것을 표시해보겠습니다. 이것을 하기 위해선 당연히 텍스트 UI를 생성하고, 스크립트를 만들어 조종해주어야 합니다.

 

GoldController

using UnityEngine;
using TMPro;

public class GoldController : MonoBehaviour
{
    [SerializeField] private TextMeshProUGUI gold;
    [SerializeField] private int currentGold = 0;
    // Start is called before the first frame update
    void Start() { gold = gameObject.GetComponent<TextMeshProUGUI>(); }

    // Update is called once per frame
    void Update() { gold.text = "Gold : " + currentGold + "G"; }

    public void GoldSum(int goldReward) { currentGold += goldReward; }
}

골드 UI를 조종할 수 있게 해주는 간단한 스크립트입니다. 스크립트의 작동방식은 currentGold에 goldReward를 더해 텍스트에 표시해주는 방식인데, 여기서 goldReward는 MonsterController에 있습니다.

 

MonsterController

몬스터 컨트롤러의 스크립트 양이 많아 이제부터는 변경점에 대해서만 간단히 가져와 설명하도록 하겠습니다.

우선 두가지 변수를 추가해줍니다.

[SerializeField] public int goldReward = 10; // 몬스터 잡을 때 획득 가능한 골드량
public int goldRewardCopy;

획득할 골드의 수치를 정하는 goldReward와 현재 몬스터 정보를 다음 몬스터로 넘기기 위한 Copy본입니다.

goldRewardCopy = this.goldReward;

Copy본을 사용해 다른 요소들과 마찬가지로 start에서 연결시켜 주고, 다음몬스터를 소환하는 SpawnNextMonster 함수에 연결시켜 줍니다.

nextMonsterController.goldReward = goldRewardCopy;

그리고 골드를 획득하게 되는 시기는 몬스터가 죽었을 때, 즉 체력이 0이 되었을 때 입니다.

GameObject.Find("GoldText").GetComponent<GoldController>().GoldSum(goldReward);

몬스터의 체력이 0이 되는 것을 판단하는 함수안에 UI안에 컴포넌트안에 GoldSum 함수를 가져와 goldReward를 매개변수로 하여 실행시켜 줍니다. 하지만 여기까지 하면 몬스터를 아무리 많이 잡아도 골드의 지급량은 10으로 그대로 입니다.

nextMonsterController.goldReward += 2;

다음 몬스터를 소환하는 함수안에서 임의로 2씩 더하는 식을 만들어 다음 몬스터로 넘어갈 때마다 2씩 증가한 골드를 획득할 수 있도록 해줍니다.

 

게임 실행

첫번째-몬스터-잡기
첫번째 몬스터 잡기

첫번째 몬스터를 잡으니 좌측상단에 위치한 골드 UI에서 10골드가 벌린 모습을 확인할 수 있었습니다.

두번째-몬스터
두번째 몬스터

두번째 몬스터를 잡으니 22골드가 된 모습을 확인하여 2 늘어난 12골드가 들어온 모습을 확인할 수 있었습니다.

 

<NEXT>

오늘은 골드UI를 통해 몬스터를 잡았을 때 벌리는 골드의 양을 확인할 수 있도록 만들어주는 작업을 진행하였습니다. 다음에는 플레이어가 벌린 골드를 통해 공격력, 체력 등 수치를 업그레이드 시킬 수 있도록 만들어 보겠습니다, 감사합니다.