官术网_书友最值得收藏!

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的類的構造函數中寫任何代碼。

主站蜘蛛池模板: 会理县| 镇江市| 浦北县| 台南市| 共和县| 商城县| 吉木乃县| 永康市| 邻水| 革吉县| 延寿县| 宁远县| 聂拉木县| 涡阳县| 新建县| 松滋市| 沙雅县| 汪清县| 永安市| 海兴县| 阿拉善右旗| 巴塘县| 松原市| 安阳县| 特克斯县| 涞水县| 满城县| 伊宁县| 通海县| 柯坪县| 荆州市| 资溪县| 澄江县| 徐州市| 星子县| 丰台区| 防城港市| 温宿县| 宿松县| 霍林郭勒市| 麻阳|