Menu
CoddyTech

Các trạng thái trò chơi

Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 14 trên 60.

Một trò chơi luôn ở một trạng thái tại một thời điểm: đang chờ người chơi, đang chạy hoặc đã kết thúc. Hai giá trị bool như isPlaying và isOver có thể vô tình cùng là true, còn một chuỗi như "Playng" vẫn biên dịch nhưng không bao giờ khớp. C# có một kiểu dữ liệu dành cho danh sách lựa chọn cố định, đó là enum. Đèn sang đường này sử dụng kiểu đó:

public enum Signal { Red, Yellow, Green }

public class Crossing : MonoBehaviour
{
    public Signal signal;

    void Update()
    {
        if (signal == Signal.Red && Input.GetMouseButtonDown(0))
        {
            signal = Signal.Green;
            Debug.Log("Walk!");
        }
    }

    public bool CanWalk()
    {
        return signal == Signal.Green;
    }
}

enum Signal { Red, Yellow, Green } tạo một kiểu mới có đúng ba giá trị, được viết là Signal.Red, Signal.Yellow và Signal.Green. Một trường Signal giữ một trong các giá trị đó tại mỗi thời điểm; bạn so sánh giá trị này bằng == và thay đổi nó bằng =. Viết sai Signal.Gren sẽ gây lỗi biên dịch, nên lỗi này hiển thị trước khi bạn nhấn Chạy.

Enum được khai báo bên ngoài lớp, nên mọi script đều có thể dùng Signal, và script của người đi bộ có thể gọi crossing.CanWalk(). Trường enum mới bắt đầu bằng giá trị đầu tiên, ở đây là Red. Trong Inspector, trường enum public hiển thị dưới dạng danh sách thả xuống gồm các giá trị của nó. Bên dưới, mỗi giá trị là một số được đếm từ 0: (int)Signal.Green là 2.

challenge icon

Thử thách

Dễ

Thêm ba trạng thái cho phần vượt qua dung nham.

  1. Khai báo public enum GameState { Ready, Playing, GameOver } phía trên lớp GameManager, và public GameState state; bên trong lớp đó.
  2. Trong Update(), khi ở trạng thái Ready, phím Space chuyển sang trạng thái Playing và ghi nhật ký Go!. Trong HitLava(), khi ở trạng thái Playing, chuyển sang trạng thái GameOver và ghi nhật ký Game over.
  3. Trong Player.cs, chỉ đọc các phím mũi tên khi GameManager.Instance.state == GameState.Playing.

Nhấn Chơi: các phím mũi tên sẽ chờ bạn nhấn Space. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

// Khai báo enum GameState ở đây: Ready, Playing, GameOver

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // một trường GameState public có tên state

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        // Khi ở trạng thái Ready, nhấn Space để bắt đầu trò chơi và ghi vào nhật ký Go!
    }

    public void HitLava()
    {
        // Khi ở trạng thái Playing, trò chơi kết thúc: ghi vào nhật ký Game over
    }
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity