1. 程式人生 > >在Unity Inspector中顯示class變數

在Unity Inspector中顯示class變數

通過Unity Inspector,我們能夠很方便的給指令碼中變數賦值。變數要在Inspector中顯示,需要滿足下面兩個條件:

1. 變數是內建型別的,比如float, string, int, double型別的變數

2. 變數訪問限制為public

例如如下指令碼:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. publicclass Test : MonoBehaviour  
  4. {  
  5.     publicfloat f;  
  6.     // Use this for initialization
  7.     void Start ()  
  8.     {  
  9.     }  
  10.     // Update is called once per frame
  11.     void Update ()  
  12.     {  
  13.     }  
  14. }  
在Inspector中顯示為這樣:

如果我們想要顯示在Inspector中一個custom class 型別的變數呢?比如:

  1. using UnityEngine;  
  2. using System.Collections;  
  3. publicclass Test : MonoBehaviour  
  4. {  
  5.     publicfloat f;  
  6.     public Person person;  
  7.     publicclass Person  
  8.     {  
  9.         publicstring name;  
  10.         publicstring address;  
  11.         publicint age;  
  12.     }  
  13.     void Start ()  
  14.     {  
  15.     }  
  16.     // Update is called once per frame
  17.     void Update ()  
  18.     {  
  19.     }  
  20. }  

在Inspector中顯示為:

可以看到,Person型別的變數並沒有在Inspector中顯示。為了顯示person變數,我們可以採用下面的方法,在Person class型別宣告前面加上[System.Serializable]

  1. using UnityEngine;  
  2. using System.Collections;  
  3. publicclass Test : MonoBehaviour  
  4. {  
  5.     publicfloat f;  
  6.     public Person person;  
  7.     [System.Serializable]   
  8.     publicclass Person  
  9.     {  
  10.         publicstring name;  
  11.         publicstring address;  
  12.         publicint age;  
  13.     }  
  14.     void Start ()  
  15.     {  
  16.     }  
  17.     // Update is called once per frame
  18.     void Update ()  
  19.     {  
  20.     }  
  21. }  

現在在Inspector檢視中就能看到Person變數顯示了:

Unity Inspector會預設顯示指令碼中的public變數,有時我們不想讓這些變數顯示,則可以在變數前面加上[HideInInspector],這樣就能隱藏這個變量了。

  1. using UnityEngine;  
  2. using System.Collections;  
  3. publicclass Test : MonoBehaviour  
  4. {  
  5.     [HideInInspector]  
  6.     publicfloat f;  
  7.     public Person person;  
  8.     [System.Serializable]   
  9.     publicclass Person  
  10.     {  
  11.         publicstring name;  
  12.         publicstring address;  
  13.         publicint age;  
  14.     }  
  15.     void Start ()  
  16.     {  
  17.     }  
  18.     // Update is called once per frame
  19.     void Update ()  
  20.     {  
  21.     }  
  22. }