Menu
CoddyTech

Kết thúc đêm

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 60 trên 60.

Thử thách cuối cùng hoàn thiện toàn bộ trò chơi: một trình quản lý có các trạng thái, chức năng tạm dừng để dừng thời gian, hai kết thúc và chức năng khởi động lại để đưa tỷ lệ thời gian về mức ban đầu.

challenge icon

Thử thách

Khó

Thêm chức năng tạm dừng, hai kết thúc và khởi động lại.

  1. pauseButton chỉ chuyển giữa Playing và Paused: Paused đặt Time.timeScale thành 0 và hiển thị pausePanel, Playing hoàn tác cả hai.
  2. Khi còn 0 giây, đêm kết thúc với trạng thái Won. Khi Won hoặc Lost: time scale bằng 0, endPanel hiển thị You survived the night! hoặc The bats got you trong endText.
  3. restartButton đặt time scale thành 1 và tải lại cảnh.

Nhấn Chơi, tạm dừng, thua rồi chơi lại. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;

public class GameManager : MonoBehaviour
{
    public enum State { Playing, Paused, Won, Lost }

    public static GameManager Instance;

    public float nightLength = 15f;
    public float spawnEvery = 2f;
    public GameObject batPrefab;
    public Transform[] spawnPoints;
    public TMP_Text dawnText;
    public Button pauseButton;
    public GameObject pausePanel;
    public GameObject endPanel;
    public TMP_Text endText;
    public Button restartButton;

    public State state;

    private float timeLeft;
    private float spawnTimer;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        state = State.Playing;
        timeLeft = nightLength;
        ShowDawn();
    }

    void Update()
    {
        if (state != State.Playing) return;

        timeLeft -= Time.deltaTime;
        spawnTimer += Time.deltaTime;
        if (spawnTimer >= spawnEvery)
        {
            spawnTimer -= spawnEvery;
            Transform point = spawnPoints[Random.Range(0, spawnPoints.Length)];
            Instantiate(batPrefab, point.position, Quaternion.identity);
        }
        ShowDawn();
    }

    public void Lose()
    {
        if (state != State.Playing) return;
        state = State.Lost;
    }

    void ShowDawn()
    {
        dawnText.text = "Dawn in " + Mathf.CeilToInt(timeLeft);
    }
}
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