Menu
CoddyTech

Danh sách trong Inspector

Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 19 trên 64.

Danh sách các mục [System.Serializable] là một bảng bạn điền trong Inspector. Người bảo vệ này đi tuần theo một lộ trình gồm các điểm dừng và chờ tại mỗi điểm chừng nào mục tương ứng còn chỉ định thời gian chờ:

[System.Serializable]
public class Stop
{
    public Transform point;
    public float wait = 1f;
}

public class Patrol : MonoBehaviour
{
    public float speed = 3f;
    public List<Stop> stops;
    private int current;
    private float waited;

    void Update()
    {
        Stop stop = stops[current];
        transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
        if (transform.position != stop.point.position) return;
        waited += Time.deltaTime;
        if (waited >= stop.wait)
        {
            waited = 0f;
            current = (current + 1) % stops.Count;
        }
    }
}

Inspector hiển thị Stops cùng số lượng và một mục thu gọn cho từng phần tử: Element 0, Element 1, v.v. Mỗi mục có Point và Wait. Nút + thêm một mục, nút trừ xóa mục đang chọn, còn tay nắm bên trái hàng cho phép kéo mục đến vị trí mới trong lộ trình. Code đọc danh sách như bình thường: danh sách có stops.Count mục, dùng stops[current].point, còn (current + 1) % stops.Count quay lại điểm dừng đầu tiên sau điểm cuối cùng. Người thiết kế màn chơi có thể đặt ba điểm dừng cho một người bảo vệ và mười điểm cho người khác mà không cần sửa script.

Mảng, khai báo bằng public Stop[] stops;, cũng hiển thị tương tự. Nút + của Unity sao chép mục cuối cùng, nên điểm dừng mới sẽ có cùng điểm và thời gian chờ với mục phía trên. Unity không hiển thị hay lưu danh sách lồng trong danh sách, chẳng hạn như List<List<Stop>>, hoặc từ điển. Thay vào đó, hãy bọc danh sách bên trong bằng một lớp [Serializable], chẳng hạn như Route có List<Stop> riêng, rồi tạo danh sách các lớp đó.

challenge icon

Thử thách

Dễ

Hiển thị cuộc trò chuyện của Mira và Tom, mỗi lần một dòng.

  1. Khai báo lớp [System.Serializable] Line với hai chuỗi công khai speaker và text, rồi thêm public List<Line> lines;.
  2. Khi bắt đầu, hiển thị lines[0]: người nói trong speakerText, nội dung trong lineText.
  3. Phím Space hiển thị dòng tiếp theo, cho đến lines.Count. Sau dòng cuối cùng, ẩn box và ghi nhật ký Dialogue over; sau đó, nhấn Space sẽ không có tác dụng.

Nhấn Chơi rồi đọc bằng phím Space. Sau đó nhấn Kiểm tra.

Tự làm thử

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // Hiển thị câu thoại đầu tiên
    }

    void Update()
    {
        // Space: chuyển sang câu thoại tiếp theo hoặc kết thúc cuộc trò chuyện
    }
}

Tất cả bài học trong Kiến trúc trò chơi trong Unity

Tự luyện tập: Playground Unity