Menu
CoddyTech

Màn tiếp theo

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

Mỗi cảnh trong danh sách cảnh của bản dựng có một số, gọi là chỉ số bản dựng: 0 cho cảnh đầu tiên, 1 cho cảnh tiếp theo, và cứ thế tiếp tục. LoadScene nhận số đó cùng với một tên, còn SceneManager.sceneCountInBuildSettings cho biết danh sách có bao nhiêu cảnh. Khi các màn chơi được sắp theo thứ tự trong danh sách, màn tiếp theo có chỉ số bằng chỉ số của cảnh đang hoạt động cộng 1. Cổng thoát này tải màn đó, rồi dừng lại sau màn cuối cùng:

void OnTriggerEnter(Collider other)
{
    if (!other.CompareTag("Player")) return;
    int next = SceneManager.GetActiveScene().buildIndex + 1;
    if (next < SceneManager.sceneCountInBuildSettings)
    {
        SceneManager.LoadScene(next);
    }
    else
    {
        Debug.Log("You finished the game!");
    }
}

Với bốn cảnh, các chỉ số là từ 0 đến 3 và sceneCountInBuildSettings là 4, vì vậy ở màn cuối cùng, next là 4, vượt quá chỉ số cuối cùng một đơn vị. Đó là lý do điều kiện kiểm tra là next < sceneCountInBuildSettings: LoadScene(4) sẽ không tải cảnh nào và ghi lại lỗi của Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.

Giờ đây, một script cổng thoát dùng được cho mọi màn chơi và không màn nào cần nêu tên cảnh. Để thêm màn chơi, bạn thêm cảnh đó vào danh sách; để đổi thứ tự, bạn kéo các cảnh đến vị trí khác trong danh sách.

challenge icon

Thử thách

Dễ

Để mỗi mục tiêu mở màn tiếp theo.

  1. Trong Start(), hiển thị "Level " + level + " of " + levels trong levelText: level là buildIndex của cảnh đang hoạt động, levels là SceneManager.sceneCountInBuildSettings - 1.
  2. Trong OnTriggerEnter, khi gặp Player, tải buildIndex + 1, hoặc 0 (menu) nếu giá trị đó không nhỏ hơn sceneCountInBuildSettings.

Nhấn Chơi và hoàn thành cả ba màn: menu sẽ xuất hiện lại. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;

public class Goal : MonoBehaviour
{
    public TMP_Text levelText;

    void Start()
    {
        // Hiển thị "Level 2 of 3": số thứ tự của màn chơi này và tổng số màn chơi
    }

    void OnTriggerEnter(Collider other)
    {
        // Người chơi đã đến đích: tải màn chơi tiếp theo, hoặc tải menu nếu đây là màn chơi cuố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