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.
Thử thách
DễThêm ba trạng thái cho phần vượt qua dung nham.
- 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 đó. - 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!. TrongHitLava(), khi ở trạng thái Playing, chuyển sang trạng thái GameOver và ghi nhật kýGame over. - Trong
Player.cs, chỉ đọc các phím mũi tên khiGameManager.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ế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàng3Trình quản lý trò chơi
Một script chạy trò chơiSingletonCác trạng thái trò chơiChuyển đổi trạng tháiÔn tập: Trình quản lý vòng chơiTự luyện tập: Playground Unity