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

게임개발 중급(64) - Monster Killer(26)

by jyppro 2023. 6. 28.

Monster Killer(26)

저번시간에는 플레이어가 몬스터를 처치했을 때 골드가 벌리는 재화시스템을 추가하였습니다. 오늘은 해당 재화시스템을 활성화 시키기 위한 사용처를 만들도록 하겠습니다.

 

체력과 공격력

먼저 모든 스텟의 기본이 되는 체력과 공격력을 골드를 사용해서 강화하도록 만들겠습니다. 우선 간단하게 UI를 만들어 배치하도록 하겠습니다. 버튼UI로 power 와 HP를 만들어 해당 버튼을 누르면 공격력과 체력이 강화되도록 하겠습니다.

버튼UI-추가
버튼 추가

추후에 더 구성이 잘 갖춰진 강화UI를 만들예정이긴 하지만, 언제 만들지는 모르겠습니다. 일단 간단하게 만들어놓고 기능을 만들어 보겠습니다.

 

골드를 사용해서 공격력과 체력을 강화시키려면 골드를 다루는 GoldController, 공격력을 다루는 WeaponController 그리고 체력을 다루는 PlayerHP를 사용해야 합니다.

 

PowerUpButton

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

public class PowerUpButton : MonoBehaviour
{
    [SerializeField] private int GoldNeeds = 10;
    [SerializeField] private GameObject WeaponPrefab; // 무기 프리팹
    public GameObject power;
    public GameObject Gold;
    // Start is called before the first frame update
    void Start()
    {
        this.Gold = GameObject.Find("GoldText");
        GetComponent<UnityEngine.UI.Button>().onClick.AddListener(UpgradePower);
    }

    // Update is called once per frame
    void UpgradePower()
    {
        if(this.Gold.GetComponent<GoldController>().currentGold >= this.GoldNeeds)
        {
            this.Gold.GetComponent<GoldController>().currentGold -= this.GoldNeeds;
            WeaponPrefab.GetComponent<WeaponController>().currnetDamage += 10;
        }
        else{
            return;
        }
    }
}

공격력을 상승시키는 버튼부터 살펴봅시다. 우선은 필요골드를 테스트를 위해 낮은 수치로 고정시킨 뒤에 각 컴포넌트에서 수치를 담당하는 변수를 가져옵니다. 그리고 현재골드와 필요골드를 비교하여 골드가 있으면 공격력을 10 강화시켜줍니다. 여기서 사용된 currentDamage는 기존의 damage에 수치를 더해주기 위해 만든 새 변수입니다.

 

HPUpButton

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

public class HPUpButton : MonoBehaviour
{
    [SerializeField] private int GoldNeeds = 10;
    public GameObject HP;
    public GameObject Gold;
    // Start is called before the first frame update
    void Start()
    {
        this.HP = GameObject.Find("PlayerHP");
        this.Gold = GameObject.Find("GoldText");
        GetComponent<UnityEngine.UI.Button>().onClick.AddListener(UpgradeHP);
    }

    void UpgradeHP()
    {
        if(this.Gold.GetComponent<GoldController>().currentGold >= this.GoldNeeds)
        {
            this.Gold.GetComponent<GoldController>().currentGold -= this.GoldNeeds;
            this.HP.GetComponent<PlayerHP>().PlayerMaxHealth += 10;
            this.HP.GetComponent<PlayerHP>().UpdateHealthSlider();
        }
        else{
            return;
        }
    }
}

비슷한 맥락으로 체력도 만들어 줍니다. 수치는 10으로 전부 고정시켜서 일단 만들었습니다. 추후에 밸런스에 따라 조정될 것입니다. 그리고 체력과 같은 경우 변경사항이 생기면 바로 업데이트를 해주어야 하므로 UpdateHealthSlider를 실행시켜 줍니다. 이제 게임을 실행하여 잘 작동하는지 확인하도록 하겠습니다.

 

게임실행

공격력-체력-증가
공격력, 체력 증가

체력은 두번 공격력은 다섯번 강화시켰습니다. 데미지가 강해지고 최대체력이 늘어난 것을 확인할 수 있었습니다.

 

<NEXT>

이번에는 몬스터의 체력과 공격력을 골드를 소비하여 증가시키는 것을 해보았습니다. 다음에는 재화를 소모시킬 수 있는 소모처를 더 추가해 보도록 하겠습니다. 감사합니다.