Menu
CoddyTech

Ôn tập: Trình quản lý vòng 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 16 trên 60.

Chương này đã thêm vào trò chơi một trình quản lý: một singleton mà các thành phần khác có thể truy cập mà không cần trường, cùng các trạng thái mà nó chuyển đổi qua lại. Trình quản lý vòng chơi sử dụng cả hai.

challenge icon

Thử thách

Dễ

Hoàn thành trò chơi nhặt xu; SetState đã được viết.

  1. Thêm public static RoundManager Instance;, gán giá trị trong Awake().
  2. Trong Update(), dùng switch với state: trạng thái Ready chờ phím Space; trạng thái Playing đếm ngược timeLeft, rồi chuyển sang Ready tiếp theo hoặc Finished sau vòng cuối.
  3. public bool TakeCoin(): chỉ khi đang ở trạng thái Playing, hãy đếm xu, hiển thị Coins: 2, rồi trả về true. Coin.cs hủy đồng xu đã được tính khi Player chạm vào.

Nhấn Chơi để chơi cả ba vòng. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using TMPro;

public enum RoundState { Ready, Playing, Finished }

public class RoundManager : MonoBehaviour
{
    // singleton: Instance tĩnh, được gán trong Awake()
    public GameObject readyPanel;
    public GameObject playPanel;
    public GameObject finishedPanel;
    public TMP_Text roundText;
    public TMP_Text coinsText;
    public TMP_Text finalText;
    public int rounds = 3;
    public float roundTime = 4f;
    private RoundState state;
    private int round = 1;
    private int coins;
    private float timeLeft;

    void Start()
    {
        SetState(RoundState.Ready);
    }

    void Update()
    {
        // rẽ nhánh theo state: Ready chờ Space; Playing đếm ngược thời gian
    }

    void SetState(RoundState next)
    {
        state = next;
        readyPanel.SetActive(next == RoundState.Ready);
        playPanel.SetActive(next == RoundState.Playing);
        finishedPanel.SetActive(next == RoundState.Finished);
        if (next == RoundState.Ready) roundText.text = "Round " + round;
        if (next == RoundState.Playing) timeLeft = roundTime;
        if (next == RoundState.Finished) finalText.text = "Coins: " + coins;
    }

    // TakeCoin(): chỉ tính xu khi đang ở Playing
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

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