Menu
CoddyTech

Dinheiro

Lição 12 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.

Torres custam dinheiro. O dinheiro pertence ao GameManager, e o BuildManager pede que ele pague. Pedir e pagar são uma só etapa: um método que verifica o dinheiro, desconta o valor quando há o suficiente e informa com um bool se conseguiu, como faz Dictionary.TryGetValue. A carteira de uma máquina de venda automática:

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

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

Nenhum chamador pode pagar sem passar pela verificação, e as moedas nunca ficam abaixo de zero, porque nada mais as altera. O preço fica no prefab: um campo do próprio script, definido no Inspector do prefab. Um prefab é um objeto carregado como qualquer outro, então é possível ler snackPrefab.price antes de instanciar qualquer coisa, para decidir se ele deve ser instanciado.

challenge icon

Desafio

Médio

As torres custam dinheiro: 150 para começar, 50 por Flecha.

  1. Tower: adicione public int cost = 50;.
  2. GameManager: adicione [SerializeField] private int startMoney = 150;, [SerializeField] private TMP_Text moneyText; e private int money;, exibido como Money: 150.
  3. public bool TrySpend(int amount): retorna false se amount > money; caso contrário, desconte o valor, exiba-o e retorne true.
  4. BuildManager: adicione [SerializeField] private GameManager game;; construa somente se game.TrySpend(towerPrefab.cost), caso contrário, registre Not enough money.

Pressione “Jogar” e construa até o dinheiro acabar. Depois, pressione “Verificar”.

Experimente você mesmo

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;
    }
}

Todas as lições de Jogo de Unity: Defesa de Torres

Pratique por conta própria: Playground de Unity