Pieniądze
Lekcja 12 z 25 w kursie Gra w Unity: Obrona wieży w Coddy.
Wieże kosztują pieniądze. Pieniądze należą do GameManagera, a BuildManager prosi go o zapłatę. Prośba i zapłata to jeden krok: metoda, która sprawdza stan pieniędzy, pobiera je, jeśli jest ich wystarczająco dużo, i zwraca wartość typu bool informującą, czy to zrobiła — tak jak odpowiada Dictionary.TryGetValue. Portfel automatu:
public bool TryPay(int price)
{
if (price > coins)
{
return false;
}
coins -= price;
coinText.text = coins + " coins";
return true;
}Żaden kod wywołujący nie może zapłacić bez sprawdzenia, a liczba monet nigdy nie spadnie poniżej zera, ponieważ nic innego jej nie zmienia. Cena jest zapisana w prefabie: w polu własnego skryptu, ustawionym w Inspektorze prefabu. Prefab to załadowany obiekt, taki jak każdy inny, więc można odczytać snackPrefab.price przed utworzeniem jego instancji, aby zdecydować, czy należy ją utworzyć.
Wyzwanie
ŚredniWieże kosztują pieniądze: na początek 150, 50 za jedną Wieżę.
Tower: dodajpublic int cost = 50;.GameManager: dodaj[SerializeField] private int startMoney = 150;,[SerializeField] private TMP_Text moneyText;iprivate int money;, wyświetlane jakoMoney: 150.public bool TrySpend(int amount): zwróć false, jeśliamount > money; w przeciwnym razie odejmij tę kwotę, wyświetl ją i zwróć true.BuildManager: dodaj[SerializeField] private GameManager game;; buduj tylko wtedy, gdygame.TrySpend(towerPrefab.cost)zwróci true, w przeciwnym razie wyświetl komunikatNot enough money.
Naciśnij „Graj” i buduj, aż skończą się pieniądze. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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;
}
}
Wszystkie lekcje w sekcji Gra w Unity: Obrona wieży
Poćwicz samodzielnie: Edytor online Unity