Menu
CoddyTech

Denaro

Lezione 12 di 25 del corso Gioco Unity: Tower Defense di Coddy.

Le torri costano denaro. Il denaro appartiene a GameManager e BuildManager gli chiede di pagare. Richiesta e pagamento sono un unico passaggio: un metodo che controlla il denaro, lo sottrae se ce n'è abbastanza e indica con un bool se lo ha fatto, proprio come risponde Dictionary.TryGetValue. Il portafoglio di un distributore automatico:

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

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

Nessun chiamante può pagare senza il controllo e le monete non scendono mai sotto zero, perché nient'altro le modifica. Il prezzo si trova sul prefab: un campo del suo script, impostato nell'Inspector del prefab. Un prefab è un oggetto caricato come qualsiasi altro, quindi si può leggere snackPrefab.price prima di istanziare qualsiasi cosa, per decidere se istanziarlo.

challenge icon

Sfida

Medio

Le torri costano denaro: 150 all’inizio, 50 per una torre.

  1. Tower: aggiungi public int cost = 50;.
  2. GameManager: aggiungi [SerializeField] private int startMoney = 150;, [SerializeField] private TMP_Text moneyText; e private int money;, visualizzato come Money: 150.
  3. public bool TrySpend(int amount): restituisce false se amount > money; altrimenti sottrai l’importo, visualizzalo e restituisci true.
  4. BuildManager: aggiungi [SerializeField] private GameManager game;; costruisci solo se game.TrySpend(towerPrefab.cost), altrimenti registra Not enough money.

Premi «Gioca» e costruisci torri finché non finiscono i soldi. Poi premi «Verifica».

Provalo tu

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

Tutte le lezioni di Gioco Unity: Tower Defense

Esercitati da solo: Playground Unity