Menu
CoddyTech

SerializeField

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 15 trên 85.

Một trường public có hai tác dụng cùng lúc: nó hiển thị trong Inspector, và mọi script khác đều có thể đọc và thay đổi nó. Thường thì bạn chỉ cần tác dụng đầu tiên. Trường private (mặc định trong C#) chỉ có thể được thay đổi bởi chính lớp đó, nên không script nào khác có thể làm hỏng nó, nhưng Unity không hiển thị trường này trong Inspector.

[SerializeField] yêu cầu Unity lưu và hiển thị trường private dù vậy. Tầm bắn của tháp pháo này được thiết lập riêng cho từng tháp trong Inspector, và không script nào khác có thể tác động đến nó:

[SerializeField] private float range = 5f;

void Start()
{
    Debug.Log("Range: " + range);
}

Đây là cách hầu hết code Unity lưu các cài đặt: để ở dạng private, kèm theo [SerializeField]. Hãy chú ý trường hợp ngược lại: đặt một trường thành private nhưng quên thuộc tính này, Unity sẽ âm thầm bỏ giá trị đã lưu trong cảnh. Trường đó sẽ quay về giá trị trong code, mà không có lỗi nào báo cho bạn biết.

challenge icon

Thử thách

Dễ

Ẩn chiều cao của đèn khỏi các script khác nhưng vẫn giữ nó trong Inspector.

  1. Đổi trường thành [SerializeField] private float height = 1f;.
  2. Giữ nguyên Start(): Inspector đặt height thành 4.

Nhấn Play: đèn vẫn treo ở độ cao 4. Sau đó nhấn Check.

Tự làm thử

using UnityEngine;

public class LampHeight : MonoBehaviour
{
    public float height = 1f;

    void Start()
    {
        transform.position = new Vector3(0, height, 0);
    }
}

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