Percabangan Berdasarkan Status
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 15 dari 56.
Setiap state game melakukan pekerjaan yang berbeda pada setiap frame. switch pada field state menempatkan pekerjaan tersebut dalam satu case untuk setiap state, dan setiap frame menjalankan tepat satu case. Perubahan state dilakukan melalui satu method, sehingga layar selalu sesuai dengan state. Pertarungan melawan bos ini memiliki intro, pertarungan, dan layar kemenangan:
public enum Phase { Intro, Fight, Won }
public class BossFight : MonoBehaviour
{
public GameObject introPanel;
public GameObject fightPanel;
public GameObject winPanel;
public int bossHp = 10;
private Phase phase;
private float timer = 3f;
void Start()
{
Enter(Phase.Intro);
}
void Update()
{
switch (phase)
{
case Phase.Intro:
timer -= Time.deltaTime;
if (timer <= 0f) Enter(Phase.Fight);
break;
case Phase.Fight:
if (bossHp <= 0) Enter(Phase.Won);
break;
case Phase.Won:
break;
}
}
void Enter(Phase next)
{
phase = next;
introPanel.SetActive(next == Phase.Intro);
fightPanel.SetActive(next == Phase.Fight);
winPanel.SetActive(next == Phase.Won);
}
}Setiap case diakhiri dengan break, karena C# tidak dapat mengompilasi case yang berlanjut ke case berikutnya. Saat timer intro habis, Enter(Phase.Fight) mengubah phase, tetapi case Fight baru berjalan pada frame berikutnya, karena frame ini sudah memilih case-nya. Jika menggunakan beberapa blok if secara berurutan, sebuah frame bisa memulai pertarungan dan menjalankan kode pertarungan pada frame yang sama.
Enter adalah satu-satunya tempat yang mengubah phase. next == Phase.Fight bernilai true hanya untuk panel pertarungan, sehingga satu pemanggilan menampilkan panel tersebut dan menyembunyikan dua panel lainnya. Pekerjaan yang dilakukan saat memasuki state, seperti mengatur ulang timer, juga dimasukkan ke Enter, sehingga dijalankan sekali, bukan pada setiap frame.
Tantangan
MudahBalap ketukan: berapa kali kamu bisa menekan Space dalam 5 detik? GameManager memiliki enum GameState (Ready, Playing, GameOver), sebuah panel untuk setiap state, dan Start memanggil SetState(GameState.Ready). Tulis Update dan SetState.
Di Update, lakukan switch pada state:
- Ready: Space memulai ronde. Tekanan itu bukan ketukan.
- Playing: setiap tekanan Space menambahkan 1 ke
tapsdan menampilkannya ditapsText, sepertiTaps: 3. SetelahroundTimedetik (5), permainan berakhir. - GameOver: Space kembali ke Ready.
SetState(GameState next) menetapkan state dan hanya menampilkan panel untuk state yang baru. Saat memasuki Playing, ronde dimulai dengan 0 ketukan, Taps: 0 di layar, dan roundTime detik tersisa; saat memasuki GameOver, hasilnya ditampilkan di resultText, seperti Taps: 3.
Tekan Play, berlomba dua kali, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
using TMPro;
public enum GameState { Ready, Playing, GameOver }
public class GameManager : MonoBehaviour
{
public GameObject readyPanel;
public GameObject playPanel;
public GameObject gameOverPanel;
public TMP_Text tapsText;
public TMP_Text resultText;
public float roundTime = 5f;
public GameState state;
private int taps;
private float timeLeft;
void Start()
{
SetState(GameState.Ready);
}
void Update()
{
// gunakan switch berdasarkan state:
// Ready: Space memulai satu ronde
// Playing: Space menghitung satu ketukan; saat waktu habis, permainan berakhir
// GameOver: Space kembali ke Ready
}
void SetState(GameState next)
{
state = next;
// tampilkan hanya panel untuk state yang baru
// ronde baru dimulai dengan 0 ketukan dan berlangsung selama roundTime detik; di akhir ronde, resultText menampilkan jumlah ketukan
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Membangun Game Sungguhan
4Scene dan Level
Muat SceneMulai Ulang LevelLevel BerikutnyaPertahankan Antar-SceneRekap: Pilih Level10Proyek: Platformer 3D
LintasanPlatform Bergerak2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di Bank3Pengelola Game
Satu Skrip Menjalankan GameSingletonStatus GamePercabangan Berdasarkan StatusUlasan: Pengelola Ronde6Proyek: Pelari Tanpa Akhir
Tiga JalurRintangan di Depan