Menu
CoddyTech

Chơi lại màn

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

Cách nhanh nhất để đặt lại một màn chơi là tải lại màn đó. SceneManager.GetActiveScene() trả về cảnh đang mở, còn name (hoặc buildIndex) của cảnh là giá trị mà LoadScene nhận. Nút Khởi động lại trên bảng thông báo kết thúc trò chơi gọi:

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unity hủy cảnh đang mở rồi dựng lại cảnh từ tệp cảnh. Mọi đối tượng trở về vị trí mà cảnh đã đặt, kể cả chiếc thùng mà người chơi làm đổ. Mỗi trường lại nhận giá trị trong Inspector, và Awake cùng Start chạy lại. Bạn không cần viết code để đưa từng thứ về vị trí cũ. Vì nút yêu cầu cảnh hiện hoạt thay vì một tên như "Level3", cùng một script có thể khởi động lại bất kỳ màn chơi nào có đặt nó.

Trường static không thuộc về cảnh: nó thuộc về lớp, nên khi tải lại, nó vẫn giữ nguyên giá trị. private static float bestTime; giữ thời gian tốt nhất qua các lần khởi động lại, còn private float time; thông thường bắt đầu lại từ 0 trong cảnh mới. GameManager.Instance cũng là static: sau khi tải lại, nó vẫn trỏ đến GameManager đã bị hủy cho đến khi Awake của GameManager mới gán lại giá trị.

challenge icon

Thử thách

Dễ

Khi rơi, hãy khởi động lại màn chơi mà người chơi đang ở và tăng số lần rơi.

  1. Thêm using UnityEngine.SceneManagement; và đổi biến đếm thành private static int falls; để giữ nguyên giá trị sau khi tải lại.
  2. Trong Update(), khi player.position.y < fallY, hãy thực hiện falls++; rồi tải SceneManager.GetActiveScene().name.

Nhấn Chơi rồi bước khỏi mép vực ở cả hai màn chơi: Falls: 1, sau đó là Falls: 2. Tiếp theo, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using TMPro;

public class LevelRestart : MonoBehaviour
{
    public Transform player;
    public TMP_Text fallsText;
    public float fallY = -3f;
    private int falls;

    void Start()
    {
        fallsText.text = "Falls: " + falls;
    }

    void Update()
    {
        // Khi ở dưới fallY: tăng số lần rơi và khởi động lại màn chơi hiện tại
    }
}

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