Menu
CoddyTech

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.

challenge icon

Tantangan

Sedang

Pemain memulai dengan uang 150, dan ArrowTower berharga 50.

  1. Di Tower, tambahkan cost bertipe int publik. Prefab ArrowTower menetapkan nilainya menjadi 50.
  2. Di GameManager, tambahkan startMoney bertipe int terserialisasi dan moneyText bertipe TMP_Text terserialisasi, serta money bertipe int privat yang dimulai dari startMoney. Tampilkan sebagai Money: 150 saat mulai dan setiap kali ada perubahan.
  3. Tambahkan public bool TrySpend(int amount): jika amount lebih besar daripada uang yang tersedia, kembalikan false dan jangan ubah apa pun; jika tidak, kurangi uang, tampilkan jumlah uang dan kembalikan true.
  4. Di BuildManager, tambahkan field terserialisasi game (sebuah GameManager). Pad kosong hanya mendapatkan tower jika game.TrySpend membayar cost prefab; jika tidak, catat Not 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;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Tower Defense