Uang
Pelajaran 6 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.
Menara membutuhkan uang. Uang itu milik GameManager, dan BuildManager memintanya untuk membayar. Meminta dan membayar adalah satu langkah: sebuah method yang memeriksa uang, mengambilnya jika jumlahnya cukup, lalu memberi tahu dengan bool apakah pembayaran berhasil, seperti cara Dictionary.TryGetValue memberikan jawaban. Dompet mesin penjual otomatis:
public bool TryPay(int price)
{
if (price > coins)
{
return false;
}
coins -= price;
coinText.text = coins + " coins";
return true;
}Tidak ada pemanggil yang bisa membayar tanpa pemeriksaan, dan jumlah koin tidak pernah kurang dari nol, karena tidak ada hal lain yang mengubahnya. Harga tersimpan di prefab: sebuah field di skripnya sendiri, yang diatur di Inspector prefab. Prefab adalah object yang dimuat seperti object lainnya, jadi snackPrefab.price dapat dibaca sebelum apa pun dibuat menjadi instance, untuk menentukan apakah object itu perlu dibuat.
Tantangan
SedangPemain memulai dengan uang 150, dan ArrowTower berharga 50.
- Di
Tower, tambahkancostbertipe int publik. Prefab ArrowTower menetapkan nilainya menjadi 50. - Di
GameManager, tambahkanstartMoneybertipe int terserialisasi danmoneyTextbertipe TMP_Text terserialisasi, sertamoneybertipe int privat yang dimulai daristartMoney. Tampilkan sebagaiMoney: 150saat mulai dan setiap kali ada perubahan. - Tambahkan
public bool TrySpend(int amount): jikaamountlebih besar daripada uang yang tersedia, kembalikan false dan jangan ubah apa pun; jika tidak, kurangi uang, tampilkan jumlah uang dan kembalikan true. - Di
BuildManager, tambahkan field terserialisasigame(sebuah GameManager). Pad kosong hanya mendapatkan tower jikagame.TrySpendmembayarcostprefab; jika tidak, catatNot enough money.
Tekan Play dan bangun sampai uang habis, lalu tekan Check.
Coba sendiri
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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.