Unity2D的遊戲指令碼可以使用3中開發語言來編寫:C#,JavaScript和BOO。你可以選擇你熟悉的程式語言來編寫,通常C#語言的程式設計功能會更加強大一些,成為首選的語言。在Unity2D中使用C#是基於mono框架來實現的,mono是一個跨平臺的C#框架,通過這個框架基本上可以將C#的程式執行在各大主流的作業系統上。
Unity2D的遊戲指令碼是跟具體的遊戲物件關聯的,無論是作用在一個具體的場景物體還是管理著批量的物體,指令碼首先必須依附於場景中的一個元素才能被執行。指令碼屬於遊戲物件的一個元件(component),給一個遊戲物件新增一個指令碼就是通過新增元件的方式來新增。一個C#的指令碼如下所示:
using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
一個指令碼通過實現一個派生自”MonoBehaviour”的類來與unity的內部工作機制建立聯絡。可以將新建立的元件型別的類作為一個藍圖,該類作為一個新型別的元件被附加到遊戲物件。每次將一個指令碼元件附加到遊戲物件,都會建立一個該藍圖定義的物件的例項。建立的指令碼檔案的檔名必須與裡面的類名相同,這樣才能將其附加到遊戲物件上。
需要注意到的主要事情是,該類中定義的兩個函式。Update函式處理遊戲物件的幀更新相關的操作。這個可能包括移動,觸發動作以及對使用者輸入的反饋,基本上在遊戲過程期間需要處理的任何事情都可以在這裡面處理。Start函式在遊戲開始前被unity呼叫(例如,在Update被第一次呼叫之前),因而是一個進行初始化操作的理想位置。
可能會疑惑為什麼不把初始化操作放在類的建構函式中,這是因為物件的構造是由編輯器處理的,在遊戲開始的時候並不如想象中那樣會發生。如果為一個指令碼元件定義構造器,它會和unity的正常操作發生干擾從而導致一些問題。
指令碼被建立之後是處於不啟用狀態的,只有將它的一個例項附加到一個遊戲物件之後程式碼才會被啟用。同時,一個遊戲物件的一個型別的元件只能有一個,也就是可以附加到遊戲物件的指令碼元件不能超過一個。
根據指令碼使用的情況,可以有以下做法:
1.指令碼位於同一個物體上。
可直接使用泛型或者型別轉換語法呼叫。
如:someScript = GetComponent<ExampleScript>();
2.指令碼位於不同物體上。
需要使用Find或相關的搜尋函式,取得指定名稱的物體資訊後,再+”.GetComponent”函式。如:GameObject.Find("stone").GetComponent<ExampleScript>()。
3.指令碼位於同一路徑或者被呼叫指令碼位於主指令碼的路徑及以下(指令碼是否被物體使用都可)。
將被呼叫指令碼中的成員(變數或方法)使用static標識,然後可以通過”指令碼.成員”的格式直接呼叫。例如:
ScriptA.CS
…
public static mm();
…
ScriptB.CS
…
ScriptA.mm();
…