Unity Engine
C#
Programming
先前看到有人在private
變數上使用了SerializeField
這個屬性(Attribute)。
unsing UnityEngine;
// 給個範例
public class Character : MonoBehaviour
{
[SerializeField]
private int HP;
void Start()
{
}
void Update()
{
}
}
而後HP
這個欄位在Unity Editor裡面,就像把變數設為public
一樣,可供使用者在Inspector裡面,對該欄位進行修改。
所以這個屬性就是把private
變數改成public
變數,然後可以像public
變數一樣可以在Editor裡面進行改寫?
事情應該沒有那麼簡單,因為SerializeField
這個名稱的意思是序列化欄位,把private
改成public
,怎麼想都跟這屬性的名稱打不著關係。
於是我去查了官方文件,發現到我對Unity這套軟體一直沒想過的問題…
以下為官方文件的整理:
Unity只會對public
變數進行序列化。
Unity會序列化所有腳本元件,然後重組新的組譯代碼,最後再製作出新的腳本元件
不能對static
變數或屬性(properties)進行序列化,private
變數可以在加上[SerializeField]
後進行序列化。
以下為Unity可以序列化的變數 (在Inspector中看到可編輯欄位)
UnityEngine.Object
的class
int
、float
、string
這些基礎型別Vector2
List
和Array
上述提到了一個重要的關鍵字 - 序列化
在Unity裡,序列化的意思是,將遊戲物件轉化成可以儲存或用於傳輸的資料。