轉載自:http://blog.sina.com.cn/s/blog_80cc3d870101ldnn.html
最近在學習NGUI代碼時遇到SerializeField,理解得不是很透徹,所以百度了一下,有以下收穫,希望能對自己和他人有所幫助。(在這裏由衷感謝那位大俠的分享)
首先,Unity會自動爲Public變量做序列化,序列化的意思是說再次讀取Unity時序列化的變量是有值的,不需要你再次去賦值,因爲它已經被保存下來。然後,什麼樣的值會被顯示在面板上呢?答案是:已經被序列化,但是沒有用[HideInInspector]標記的值。
[HideInInspector]表示將原本顯示在面板上的序列化值隱藏起來。
[SerializeField]表示將原本不會被序列化的私有變量和保護變量變成可以被序列化的,那麼它們在下次讀取的值就是你上次賦值的值。
1、如果a是公有的序列化變量。
(1)如果你想要在面板中看到變量a,那麼用:
public int a;
(2)如果你不想在面板中看到變量a,那麼用:
[HideInInspector]
public int a;
這樣a可以在程序中被代碼賦值,但不會在面板中看到,也不能手動設置賦值。
2、如果a是私有的序列化變量,你想在面板中讀取並賦值,那麼用:
[SerializeField]
private int a;
3、如果a是私有的序列化變量,你想在面板中讀取,但是不賦值,那麼用:
[HideInInspector][SerializedField]
private int a;
public int b
{
get{return a;}
}
然後在Editor中顯示,EditorGUILayout.LabelField("value", game.b.ToString());
4、如果a是私有序列化變量,你不想在面板中做任何操作(不想看到,也不想寫),但是想要在程序中給它賦值,那麼用。
[HideInInspector][SerializedField]
private int a;
public int b