- Unity 4 3D開發實戰詳解
- 峰 杜化美 張月霞 索依娜編著
- 743字
- 2019-01-01 21:14:57
3.3 使用C#腳本的注意事項
除了語法規則之外,使用C#腳本與JavaScript腳本編寫程序還有一些不同的地方,需要特別注意。
1.繼承自MonoBehaviour
所有的行為腳本必須從MonoBehaviour繼承(直接的或間接的)。在JavaScript中這個是自動完成的,但是在C#中,必須顯示注明。如果你通過Asset→Create→C # Script創建腳本,系統模板已經包含了必要的定義。
public class NewBehaviourScript : MonoBehaviour {...} // C#腳本
2.使用Awake或Start函數初始化
JavaScript中放在函數之外的代碼,在C#中必須置于Awake或Start函數里。Awake和Start的不同之處在于,Awake是在加載場景時運行,Start是在第一次調用Update或FixedUpdate函數之前被調用,Awake函數運行在所有Start函數之前。
3.類名字必須匹配文件名
JavaScript中類名被隱式地設置為腳本的文件名(不包含文件擴展名),但是,在C#腳本中必須手工編寫,而且類名還必須和文件名相同,否則在控制臺會報錯。
4.C#中協同程序有不同的句法規則
協同程序(Coroutines)必須是 IEnumerator返回類型,并且 yield用yield return替代。具體可以使用如下的C#代碼片段來實現。
1 using System.Collections;
2 using UnityEngine; //導入系統包
3 public class NewBehaviourScript : MonoBehaviour { //聲明類
4 // C# 協同程序
5 IEnumerator SomeCoroutine () { //聲明函數
6 yield return 0; // 等待一幀
7 yield return new WaitForSeconds (2); //等待2s
8 }}
5.只有滿足特定情況變量才能顯示在屬性查看器中
只有序列化的成員變量才能顯示在屬性查看器中,而private和protected類型的成員變量只能在專家模式中顯示,并且,其屬性不被序列化或顯示在屬性查看器。
6.盡量避免使用構造函數
不要在構造函數中初始化任何變量,要用Awake或Start 函數來實現。即便是在編輯模式, Unity 仍會自動調用構造函數,這通常是在一個腳本編譯之后,因為需要調用腳本的構造函數來取回腳本的默認值。無法預計何時調用構造函數,它或許會被預置件或未激活的游戲對象所調用。
單一模式使用構造函數可能會導致嚴重后果,會帶來類似隨機的空引用異常。因此,如果想實現單一模式不要用構造函數,要用Awake函數。事實上,沒必要在繼承自MonoBehaviour的類的構造函數中寫任何代碼。