Menu
CoddyTech

Denaro

Lezione 6 di 18 del corso Gioco Unity: difesa della torre 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

Il giocatore inizia con 150 unità di denaro e un ArrowTower costa 50.

  1. In Tower, aggiungi un int pubblico cost. Il prefab di ArrowTower lo imposta a 50.
  2. In GameManager, aggiungi un int serializzato startMoney e un TMP_Text serializzato moneyText, e un int privato money che inizia da startMoney. Mostralo come Money: 150 all'inizio e dopo ogni modifica.
  3. Aggiungi public bool TrySpend(int amount): quando amount è maggiore del denaro disponibile, restituisci false e non modificare nulla; altrimenti sottrai l'importo, mostra il denaro e restituisci true.
  4. In BuildManager, aggiungi un campo serializzato game (un GameManager). Un pad libero riceve una torre solo quando game.TrySpend paga il cost del prefab; altrimenti registra Not enough money.

Premi Play e costruisci finché non finiscono i soldi, poi Check.

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;
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: difesa della torre