# [Unity Engine] SerializeField屬性 ###### tags: `Unity Engine` `C#` `Programming` 先前看到有人在`private`變數上使用了`SerializeField`這個屬性(Attribute)。 ```C#= 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`,怎麼想都跟這屬性的名稱打不著關係。 於是我去查了[官方文件](https://docs.unity3d.com/ScriptReference/SerializeField.html),發現到我對Unity這套軟體一直沒想過的問題... - **Unity Engine是怎麼判定我們寫的腳本可以製造這些欄位供使用者在Inspector裡面進行編輯的?** 以下為官方文件的整理: 1. Unity只會對`public`變數進行序列化。 2. ==Unity會序列化所有腳本元件,然後重組新的組譯代碼,最後再製作出新的腳本元件== 3. 不能對`static`變數或屬性(properties)進行序列化,`private`變數可以在加上`[SerializeField]`後進行序列化。 4. 以下為Unity可以序列化的變數 **(在Inspector中看到可編輯欄位)** 1. 所有繼承`UnityEngine.Object`的`class` 2. `int`、`float`、`string`這些基礎型別 3. 一些Unity的內建型別,例如`Vector2` 4. 存有**可序列化**屬性的`List`和`Array` 5. Enums 6. Struct 序列化 --- 上述提到了一個重要的關鍵字 - **序列化** 在Unity裡,序列化的意思是,將遊戲物件轉化成可以儲存或用於傳輸的資料。 參考資料 --- [Unity官方API](https://docs.unity3d.com/ScriptReference/SerializeField.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up