Menu
CoddyTech

Tham chiếu tốt hơn tìm kiếm

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 59 trên 85.

Một script có thể truy cập đối tượng khác bằng bốn cách: trường được thiết lập trong Inspector, tìm GameObject.Find theo tên, tìm theo tag hoặc tìm FindAnyObjectByType theo kiểu. Với một đối tượng có sẵn trong cảnh ngay từ đầu, code Unity dùng trường Inspector vì ba lý do:

  • Tốc độ. Tham chiếu được điền trước khi trò chơi bắt đầu. Mỗi lần tìm kiếm đều duyệt qua các đối tượng trong cảnh, và tìm kiếm trong Update() sẽ làm việc đó ở mọi khung hình.
  • An toàn. Tên trong chuỗi sẽ không còn khớp khi ai đó đổi tên đối tượng: Find trả về null và lỗi xuất hiện sau đó, tại bất kỳ dòng nào sử dụng nó. Trường Inspector để trống sẽ gây ra UnassignedReferenceException, trong đó nêu tên trường và script.
  • Rõ ràng. Inspector cho thấy script phụ thuộc vào những gì. Lệnh gọi Find ẩn điều đó bên trong code.
// Gán một lần trong Inspector: không cần tìm kiếm, đổi tên cũng không ảnh hưởng
[SerializeField] private Transform door;

// Tìm kiếm ở mỗi khung hình và trả về null sau khi đổi tên cửa
void Update()
{
    Transform d = GameObject.Find("Door").transform;
}

Việc tìm kiếm có lúc cần thiết: với các đối tượng chỉ tồn tại khi trò chơi đang chạy, chẳng hạn như đối tượng được tạo ra trong lúc chơi, và với các script phải hoạt động trong mọi cảnh. Ngay cả khi đó, hãy tìm một lần trong Start() rồi lưu kết quả vào một trường.

Tự làm thử

Bài học này không có thử thách code.

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity