Menu
CoddyTech

돈

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 6번째.

타워를 건설하려면 돈이 듭니다. 돈은 GameManager에 있고, BuildManager는 GameManager에 지불을 요청합니다. 요청과 지불은 한 단계로 이루어집니다. 돈이 있는지 확인하고, 충분하면 돈을 가져간 다음, 지불했는지 bool로 알려주는 메서드입니다. Dictionary.TryGetValue가 답하는 방식과 같습니다. 자판기의 지갑은 다음과 같습니다.

public bool TryPay(int price)
{
    if (price > coins)
    {
        return false;
    }

    coins -= price;
    coinText.text = coins + " coins";
    return true;
}

호출자는 확인 절차 없이 지불할 수 없으며, 다른 어떤 것도 동전을 변경하지 않으므로 동전 수는 절대 0보다 낮아지지 않습니다. 가격은 프리팹에 있습니다. 프리팹의 Inspector에서 설정하는 자체 스크립트의 필드입니다. 프리팹도 다른 객체와 마찬가지로 로드된 객체이므로, 인스턴스화하기 전에 snackPrefab.price를 읽어 인스턴스화할지 결정할 수 있습니다.

challenge icon

챌린지

중급

플레이어는 처음에 150의 돈을 가지고 시작하고, ArrowTower의 비용은 50입니다.

  1. Tower에 public int cost를 추가합니다. ArrowTower 프리팹의 값을 50으로 설정합니다.
  2. GameManager에 직렬화된 int startMoney와 직렬화된 TMP_Text moneyText, 그리고 startMoney에서 시작하는 private int money를 추가합니다. 시작할 때와 값이 바뀔 때마다 Money: 150으로 표시합니다.
  3. public bool TrySpend(int amount)를 추가합니다. amount가 보유한 돈보다 많으면 false를 반환하고 아무것도 변경하지 않습니다. 그렇지 않으면 해당 금액을 차감하고, 돈을 표시한 뒤 true를 반환합니다.
  4. BuildManager에 직렬화된 필드 game(GameManager)을 추가합니다. 빈 건설 패드에는 game.TrySpend가 프리팹의 cost를 지불하는 경우에만 타워를 생성합니다. 그렇지 않으면 Not enough money를 로그로 출력합니다.

Play를 눌러 돈이 바닥날 때까지 타워를 건설한 다음 Check를 누릅니다.

직접 해보기

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private int startLives = 20;
    [SerializeField] private TMP_Text livesText;

    private int lives;

    void OnEnable()
    {
        Enemy.ReachedBase += OnReachedBase;
    }

    void OnDisable()
    {
        Enemy.ReachedBase -= OnReachedBase;
    }

    void Start()
    {
        lives = startLives;
        ShowLives();
    }

    void OnReachedBase(Enemy enemy)
    {
        lives -= enemy.data.damage;
        ShowLives();
    }

    void ShowLives()
    {
        livesText.text = "Lives: " + lives;
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨