前言
Gizmos是製作輔助線的函式,用於繪製物理設線視覺化、協助重疊物件點擊、紀錄物件移動路徑等等,用途將相當廣泛,算是非必要的輔助程式,用於輔助遊戲製作。
射線和視線等等偵測機制,其實對於遊戲製作相當重要,原本繪製輔助線只是要給偵測範圍可視化,順便多學一些Unity程式代碼,沒想到炸出Physics RayCast等一系列雷射相關程式。
Gizmos介紹
詞彙
Gizmos有英文中的「小發明」跟「小玩意兒」的意思,不過實際使用就是輔助線的意思,因為的確是輔助遊戲製作的小程式,所以叫做小玩意兒也不算太奇怪。
Unity 相關設定
在Unity中,無論是Game還是Scenes中,在視窗的右上角都擁有一個Gizmos的按鈕,按下去會亮,代表在這個視窗中會顯示Gizmos。
基本參數
Gizmos有四個基本參數,如下:
- color(顏色) 。繪製輔助線的顏色
- exposure(曝光)。不常用,跟材質相關。
- matrix(矩陣),如果輔助線會轉動等需要使用。
- probeSize(探測針大小)。不常用,渲染相關。
啟動函式
在Unity中,Gizmos有兩個啟動函式:
- 程式(Script)展開時才會運作的OnDrawGizmos()
- 程式(Script)展開和選擇時才會運作的OnDrawGizmosSelected()。
OnDrawGizmos()
{
}
DrawGizmosSelected()
{
}
常用程式函數
因為這篇文章主要作為導覽跟紀錄,所以不會詳細介紹每一個函數,我會將官方網站的清單放在正下方,有興趣可以自行參閱。
P.S Vector3指的是三維座標,也可以只儲存二維。
01. DrawCube (Vector3 center, Vector3 size)
繪製一個實心正方形,自帶兩個參數,中心點參數及正方形大小
02. DrawLine (Vector3 form,Vector3 to)
繪製一條線,自帶兩個參數,起點到終點。
03. DrawRay (Vector3 from,Vector3 Direction)
繪製一條雷射,自帶兩個參數,起點跟方向。
04. DrawShpere (Vector3 center, Vector3 radius)
繪製一個實心圓,自帶兩個參數,分別為中心點跟半徑。
05. DrawWireCube(Vector3 center, Vector3 size)
繪製一個空心正方形,自帶兩個參數,中心點參數及Cube大小
06. DrawWireSphere(Vector3 center, Vector3 radius)
繪製一個空心圓,自帶兩個參數,分別為中心點跟半徑。
使用方式
Gizmos的運作方式跟 Start 和 Update 相似,套用前面的Gizmo程式碼,以前者作為舉例,直接在裡面寫上需要繪製的內容即可。
OnDrawGizmos()
{
Vector3 origin = new Vector3 (0,0,0);
Vector3 direction = new Vector3 (1,0,0);
Gizmos.Color = new color (1,1,1,1);
Gizmos.DrawRay(origin,direction);
}
移動物件的使用方式
在 Unity 中 Gizmos 的座標是世界座標,如果希望輔助線隨物體移動,只需要加上一條簡單的程式碼即可。
OnDrawGizmos()
{
Vector3 origin = new Vector3 (0,0,0);
Vector3 direction = new Vector3 (1,0,0);
Gizmos.matrix = transform.localToWorldMatrix;
Gizmos.Color = new color (1,1,1,1);
Gizmos.DrawRay(origin,direction);
}
結語
Gizmos雖然並沒有使用太多,不過感覺會式相當重要的程式,尤其在程式的維護及傳承,對於之後的程式美術配合跟程式員彼此配合都相當有用,而且不需要也可以關起來,可以說是相當重要的輔助程式。
更新:近期開始正式使用Raycast,因此重新拾回了Gizmos的用法,對於可視化繪製,的確是相當重要的內容。