Buat Sesuai Keinginanmu
Pelajaran 25 dari 25 dalam kursus Game Unity: Tower Defense di Coddy.
Game ini membutuhkan bagian akhir. Kamu kalah saat nyawa mencapai 0, dan menang saat semua gelombang telah dikirim serta tidak ada musuh yang tersisa. Pemuncul menunggu hingga papan kosong dengan WaitUntil, yang memeriksa lambda sekali setiap frame, lalu memicu sebuah peristiwa:
yield return new WaitUntil(() => switchesOn == switches.Length);Kedua akhir menampilkan EndPanel dan menghentikan game dengan Time.timeScale = 0. Tank yang menerima 2 kerusakan saat tersisa 1 nyawa akan melewati pemeriksaan untuk nilai tepat 0, jadi Mathf.Max menjaga jumlah nyawa tetap 0 atau lebih. Time.timeScale mempertahankan nilainya saat memuat scene, jadi Main Lagi mengaturnya kembali ke 1 terlebih dahulu.
Lalu buat game ini sesuai keinginanmu. Di sini, startMoney (150), startLives (20), dan timeBetweenWaves (8) mengambil nilai dari kodemu karena Inspector pemain ini hanya bisa dibaca: ubah nilainya di tempat variabel tersebut dideklarasikan, lalu tekan tombol “Main”. Pertahanan gabungan di tikungan jalur, yang ditingkatkan seiring bertambahnya uang, mengalahkan game bawaan.
Tantangan
SulitAkhiri permainan, lalu sesuaikan kodemu.
WaveSpawner: tambahkanpublic event Action AllWavesCleared;, yang dipicu setelah gelombang terakhir ketikaEnemy.All.Count == 0(WaitUntil).GameManager: pastikan jumlah nyawa 0 atau lebih.End(message)menampilkanendPaneldanendTextyang diserialisasi, lalu mengaturTime.timeScale = 0:Game Oversaat jumlah nyawa 0,You Win!ketika semua gelombang selesai.public void PlayAgain():Time.timeScale = 1, lalu muat ulang scene.
Tekan tombol “Main” dan pertahankan markas sepanjang delapan gelombang. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
[SerializeField] private int startMoney = 150;
[SerializeField] private int startLives = 20;
[SerializeField] private WaveSpawner spawner;
[SerializeField] private TMP_Text moneyText;
[SerializeField] private TMP_Text livesText;
[SerializeField] private TMP_Text waveText;
private int money;
private int lives;
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
Enemy.Killed += OnKilled;
spawner.WaveStarted += ShowWave;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
Enemy.Killed -= OnKilled;
spawner.WaveStarted -= ShowWave;
}
void Start()
{
money = startMoney;
lives = startLives;
ShowMoney();
ShowLives();
}
public bool TrySpend(int amount)
{
if (amount > money)
{
return false;
}
money -= amount;
ShowMoney();
return true;
}
public void Earn(int amount)
{
money += amount;
ShowMoney();
}
void OnKilled(Enemy enemy)
{
Earn(enemy.data.reward);
}
void OnReachedBase(Enemy enemy)
{
lives -= enemy.data.damage;
ShowLives();
}
void ShowMoney()
{
moneyText.text = "Money: " + money;
}
void ShowLives()
{
livesText.text = "Lives: " + lives;
}
void ShowWave(int wave, int total)
{
waveText.text = "Wave " + wave + "/" + total;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Game Unity: Tower Defense
Latihan sendiri: Playground Unity