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 đó.
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.
- Khai báo lớp
[System.Serializable]Linevới hai chuỗi công khaispeakervàtext, rồi thêmpublic List<Line> lines;. - Khi bắt đầu, hiển thị
lines[0]: người nói trongspeakerText, nội dung tronglineText. - Phím Space hiển thị dòng tiếp theo, cho đến
lines.Count. Sau dòng cuối cùng, ẩnboxvà 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
1Thành phần, không phải hệ thống phân cấp
Thành phần nhỏTập lệnh kẻ địch cơ sởThành phần trừu tượngCác thành phần phối hợp với nhauÔn tập: tháp pháo mô-đunÔn tập: pháo nòng đôi4Dữ liệu tuần tự hóa
Lớp có thể tuần tự hóaDanh sách trong InspectorKiểu liệt kê trong InspectorÔn tập: Bảng vật phẩm rơiÔn tập: Quay vật phẩm2Giao diện trong Unity
IDamageableGiao diện và TryGetComponentGetComponentsÔn tập: phím tương tácÔn tập: đối tượng gần nhất trong tầm với5ScriptableObjects
Tài sản dữ liệuChỉ số vũ khíCài đặt dùng chungLưu gióSóng dưới dạng dữ liệuÔn tập: Cơ sở dữ liệu vật phẩmÔn tập: Mua hàng từ cửa hàng8Code có thể tái sử dụng
Phương thức mở rộngSingleton tổng quátCác hàm hỗ trợ tổng quátÔn tập: FindNearest3Sự kiện
Sự kiện C# trong UnityĐăng ký trong OnEnableCác trường UnityEventSự kiện điều khiển UIÔn tập: Cửa sổ bật lên thành tíchÔn tập: Bộ hẹn giờ cửa sổ bật lên6Lưu dữ liệu bằng JSON
JsonUtilityLưu trò chơiTải dữ liệu và giá trị mặc địnhÔn tập: các ô lưuChọn và xóa một ô lưu9Tái sử dụng đối tượng bằng pool
Vì sao cần pool đối tượngPool dùng hàng đợiObjectPool của UnityÔn tập: pool đạnTự luyện tập: Playground Unity