一、前言
這篇文章將會介紹建構式(Constructor),這是一個隱藏在程式腳本中的重要知識,我們極常使用建構式,但新手程式員幾乎不會知道它。
二、建構式
學習遊戲程式的第一站,我想大多數人都是學習如何讓物件移動,因此會使用座標系統(Vector3或Vector2),在新建一個Vector3實例的過程中,我們就使用到了建構式。
1. 基本定義
首先,建構式"不用"為資料類別命名(例如為新的 flaot 命名 a),無 void 參數亦不回傳,用於溝通呼叫該函式(建構式)者,如何設定該腳本中的參數。
若無建立建構式,則系統自動撰寫隱藏的建構式,該建構式為空函式,無任何程式碼區塊,自行創立建構式來定義參數,是中高階程式降低耦合性的手段。
2. 建構與初始化
public Player(HealthSystem hp,EnergySystem mp)
{
this.HealthSystem = hp;
this.EnergySystem = mp;
}
我們可以把建構式看成創建新角色的流程,裡面的欄位很完整,有血量、魔力、攻擊力與防禦力,建構式就像是一個設計指令,你要怎麼樣的角色?
如果我們沒有特別撰寫建構式,那這一個角色就會是一個默認的角色,所有的數值都是零,因此這個角色不存在;如果我們自己撰寫一個建構式,則可以讓角色有一個默認的基礎數值。
如果我們相要這個角色特別一點,我們可以使用使用別的建構式創造一個比較強大的角色,這將使用物件導向多載的概念,也就是相同的函式命名但攜帶不同的參數。
3. 默認與參數
沒有參數的建構式我們稱之為默認的建構式,隱藏在程式腳本後的是系統幫你寫好的默認建構是;攜帶參數的建構式可以讓別人建構此程式腳本時,指定一些基礎的數值,譬如等級十。
三、Unity 中的使用
我們來看看在 Unity 中我們已經用過的建構式,這些建構是從新手到現在都依然會持續使用的程式,我們很常使用到它們的建構式。
1. 三維座標(Vector3)
我們很常在 Unity 的程式馬中撰寫關於 Vector3 的內容,例如:
vector3 playerPosition = new Vector3(0,0,0);
上面使用 new 關鍵字創建一個新的三維向量,三維向量本身就是一個程式腳本,使用關鍵字就是在使用建構式。
2. 顏色(Color)
如果你有使用過顏色,那你應該也會使用類似的寫法:
Color boxcolor = new Color(float r, float g, float b);
如同座標系統,這也是在調用建構式,而我們除了可以寫RGB以外,還可以在後面添加透明度,同個名稱不同參數的概念稱之為多載:
Color boxcolor = new Color(float r, float g, float b,float a);
3. 四元數(Quaternion)
如果你曾經撰寫過物件轉向或旋轉,那你肯定有聽過四元數,不過我們通常會用四元數字帶的腳本去轉換成三維座標,所以這邊不特別舉例。
四、後記
建構式是最讓我震驚的一個學習知識,當我了解到建構式的概念後,我發現有很多程式設計上的東西都被點通了,有趣的地方在於,我是在接觸物件導向的設計模式時才碰觸到建構式,而當我學會有限狀態機後,我發現建構式是降低耦合性的重要手段。