Menu
CoddyTech

金钱

Coddy Unity 塔防游戏 课程的第 12 课,共 25 课。

建造塔需要钱。钱由 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,以决定是否要实例化它。

challenge icon

挑战

中等

建造塔需要花钱:初始有 150,每支箭花费 50。

  1. Tower:添加 public int cost = 50;。
  2. GameManager:添加 [SerializeField] private int startMoney = 150;、[SerializeField] private TMP_Text moneyText; 和 private int money;,显示为 Money: 150。
  3. public bool TrySpend(int amount):如果 amount > money,返回 false;否则扣除这笔钱,显示余额,并返回 true。
  4. BuildManager:添加 [SerializeField] private GameManager game;;只有在 game.TrySpend(towerPrefab.cost) 成功时才建造,否则记录 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 塔防游戏中的所有课

自己练习: Unity 在线编辑器