Деньги
Урок 12 из 25 курса Игра на Unity: Tower Defense на Coddy.
Башни стоят денег. Деньги принадлежат GameManager, а BuildManager просит его заплатить. Запрос и оплата — это один шаг: метод, который проверяет количество денег, списывает их, если их достаточно, и сообщает с помощью bool, удалось ли заплатить, как это делает Dictionary.TryGetValue. Кошелёк торгового автомата:
public bool TryPay(int price)
{
if (price > coins)
{
return false;
}
coins -= price;
coinText.text = coins + " coins";
return true;
}Ни один вызывающий код не сможет заплатить без проверки, и количество монет никогда не станет меньше нуля, потому что больше ничто его не меняет. Цена хранится в префабе: это поле собственного скрипта префаба, заданное в Inspector префаба. Префаб — это загруженный объект, как и любой другой, поэтому значение snackPrefab.price можно прочитать до создания экземпляра, чтобы решить, нужно ли его создавать.
Задание
СреднеБашни стоят денег: 150 на старте, 50 за одну башню-стрелка.
Tower: добавьpublic int cost = 50;.GameManager: добавь[SerializeField] private int startMoney = 150;,[SerializeField] private TMP_Text moneyText;иprivate int money;, отображаемое значение —Money: 150.public bool TrySpend(int amount): возвращает false, еслиamount > money; иначе вычитает эту сумму, отображает её и возвращает true.BuildManager: добавь[SerializeField] private GameManager game;; строй башню, только еслиgame.TrySpend(towerPrefab.cost)возвращает true, иначе выведи в журналNot enough money.
Нажми «Играть» и строй башни, пока не закончатся деньги. Затем нажми «Проверить».
Попробуйте сами
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;
}
}
Все уроки раздела Игра на Unity: Tower Defense
Потренируйтесь самостоятельно: Песочница Unity