Unity3D是一個基于組件(Component)編程的游戲引擎。而且Unity3D本身的類非常多,類的結構圖如下:
由上圖可以看出Unity中的所有類都繼承于Object,而Unity中只分了兩個種類,一個是GameObject和一個Component,而Component的派生類包含了Unity中所有類,Unity3D面向組件編程的思想略見一斑。
在Unity中,在Scene中所有物體都稱之為GameObject,區別不同的GameObject就需要看不同的Component。接下來我們分別介紹不同組件。
Transform:
現在Unity中創建一個Empty GameObject ,選中我們新建的GameObject,在Inspector視圖中我們看到如圖的組件 默認帶了一個Transform組件。
Transform組件包含三個屬性位置(Position),旋轉(Rotation),縮放(Scale),這個組件是確定我們的GameObject是在3D空間位置,這個是不能去掉的,否則我們的GameObject就不是存在Scene中的了,雖說Empty GameObject在場景中看不到,但是它確實是真實存在的。
Mesh Filter:
在上面創建的GameObject的Inspector視圖中有個Add Component按鈕,點擊此按鈕添加Mesh Filter然后選點擊Mesh后面的紅框選中的按鈕,接下來
我們看到如下界面
選擇一個Mesh,在回到Scene中,場景并沒有什么變化,接下來我們就需要把我們的Mesh給顯示出來了。
Mesh Renderer:
和上述步驟一樣,Add Component,選擇Mesh Renderer,返回到Scene中看到會有如此場景,選擇上面所說的不同Mesh,可以看到Scene中呈現出不同的形狀。
在Unity中,GameObject呈現出這種顏色,一般都是材質的缺失。現在新建一個材質球(Material)在Project視圖中點擊Create選擇Material,然后把New Material拖拽給GameObject,場景顯示如圖
接下來我們通過代碼來更詳細了解Transform。
Transform:
默認創建的腳本會繼承MonoBehaviour這個類,下次我們詳細講解這個類。
編寫如下簡單的代碼:
運行后我們觀察我們GameObject的位置(Position)屬性
而Rotation屬性是一個四元數,通過Euler角和Vector3進行轉換,存在一定的誤差。
接下來我們在Update中編寫代碼。
我們可以看到我們GameObject在場中旋轉起來了。
Rotate有六個重載方法,根據參數的命名,很容易知道每個參數的意義。
同樣位置(Position)移動的方法Translate也有類似的重載。
Transform的介紹基本就是這樣了,下次再介紹其他更炫酷的屬性吧。