# [Unity #2] SerializeField 介紹 ###### tags: `Unity` SerializeField可將private的變數賦予**Serialize**屬性並顯示於inspector上 例子: ```csharp= [SerializeField] private float moveSpeed = 7f; ``` ![image.png](https://hackmd.io/_uploads/ryrsCU9Qa.png) ## Description Force Unity to serialize a private field. When Unity serializes your scripts, it only serializes public fields. If you also want Unity to serialize your private fields you can add the SerializeField attribute to those fields. Unity serializes all your script components, reloads the new assemblies, and recreates your script components from the serialized versions. This serialization is done with an internal Unity serialization system; not with .NET's serialization functionality. ### The serialization system can do the following: 1. CAN serialize public non-static fields (of serializable types) 2. CAN serialize nonpublic non-static fields marked with the SerializeField attribute. 3. CANNOT serialize static fields. 4. CANNOT serialize properties. ## 什麼是序列化 將遊戲物件轉成可儲存格式的過程 ==可被序列化:== 1. C# data(int, string float...) 2. Unity內建數據(Vector, Color, Rect...) 3. 繼承UnityEngine.Object的類別 4. 標記了[Serialize]的類別 5. Array, List容器 ==不能被序列化:== 1. Abstract 2. Static 3. Generic 4. 沒有標記[Serialize]的類別 5. 其他容器 如:Directory ==會被Unity序列化:== 1. Public變數 2. 加上[SerializeField]的變數 ==不會被Unity序列化:== 1. const, static, readonly 2. 加上[NonSerialized]的變數 ## 資料來源 [【阿空】Unity 基礎序列化!大解析!](<https://www.youtube.com/watch?v=Ah-ARrc_yJM>) [Unity Document](<https://docs.unity3d.com/ScriptReference/SerializeField.html>) [[Unity Engine] SerializeField屬性](<https://hackmd.io/@BKLiang/unity_serialize-field#%E7%99%BC%E7%94%9F%E4%BA%86%E7%94%9A%E9%BA%BC%E4%BA%8B%E2%80%A6>) [亂七八糟的_遊戲開發誌[23] Unity序列化 基本篇](<https://home.gamer.com.tw/creationDetail.php?sn=4773479>)