金钱
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,以决定是否要实例化它。
挑战
中等建造塔需要花钱:初始有 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):如果amount > money,返回 false;否则扣除这笔钱,显示余额,并返回 true。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 在线编辑器