1. 程式人生 > >Unity3d 之 內建圖形介面系統UnityGUI

Unity3d 之 內建圖形介面系統UnityGUI

一、說在前面的:
1、unity內建的ui系統,無論是在效能的表現上、功能的強大性上、製作複雜ui的便捷性上,還是其它的一些方面都不如一些第三方的外掛來的好,如:NGUI和DF-GUI(PS: 後者比前者要好很哦,推薦!))。
2、雖然UnityGUI不如某些第三方的外掛,但是它在做一些簡單的測試上,做資料高度上還是要方便一些的;而且如果你要做Inspector的定製與Unity外掛開發的話,UnityGUI你是繞不過去的哦。所有大概熟悉一下UnityGUI還是必要的!
3、關於UnityGUI的所有知識,在官方文件中的都有詳細的介紹,在聖典上也有一一翻譯。我這裡只是做一些簡單的記錄,也許有不對的地方,也許以後還會所補充!
4、還有就剛接觸這塊時覺得UnityGUI相關API有點亂,覺得來必要記錄一下。

二、GuiLayer元件:
GuiLayer是顯示UnityGUI元素的必要元件,且必須附在一個相機物件上!不然你的UI是顯示不出來的。

三、古老的元件:
1、這部分主要是GuiTextGuiTexture元件,GuiElement是它們的基類,詳參相應的連結。
2、GuiText以用來列印顯示一些除錯資訊和簡單的資料顯示。
3、GuiTexture也在用來做一些簡單ui部件或整個遊戲畫面的背景。

四、UnityGUI系統的分類:

這部分就比較複雜一些了。
1、首先它可以分成兩個獨立的部分:非Editor類與Editor類。其中每部分中可以分成兩個獨立的部分:GUI系和GUILayout系。其中的GUI系下的元件的名字基本上只用“GUI”開頭,而GUILayout系下的元件的名字基本上是“GUILayout”開頭的。這樣就有四個相對獨立的UI系統了,這四個部分,每個拿出來都能相對完整個完成一個UI製做。

2、不同的是Editor類是用於編譯器的制定與擴充套件方面,GUILayout系要比GUI系在功能上要強一點而以。呵呵,是不是有點繞,有點亂,有點暈。非Editor類與Editor類共存還點說的過去,GUILayout系要比GUI系共存就有點那個了。
3、本來一個不復雜的UI系統,搞這好幾套,還混合著用,就變得有點頭疼不。出現這種情況可能是為了向上相容吧,不過代價有點大啊。
4、不過只要我們理清楚它們的別,儘量只用一種,應該還好吧!下面我將會重點記錄GUILayout系的UI,

五、GUILayout系下的組成:

1、樣式的元件:
這是四個類別所共享的。
GUISkin是一元件GUIStyle的集合。GUISkin

包含一組所有控制元件的樣式,可以修改,也可自定新的。
GUISetting是UI的一些標準設定,這些設定被所有在GUISkin中的元素共享。它也是包含在GUISkin的元件的inspector下的。
GUIStyle定義一個介面元素(或者一個控制元件)如何渲染的所有資訊,如它使用的字型、圖示位置、背景圖片和間距等等,很多的設定。

2、控制元件構造元件:

GUILayout是用來結構各類控制元件的。
構造一個控制元件可以有三個引數:
內容--文字/圖片/GUIContent;
樣式--GUIStyle物件;
佈局選項--GUILayoutOption物件,這個引數的數量是可變的。用於控制控制元件的大小,當於GUI系中的Rect引數。注:GUILayoutOption物件要通過GUILayout元件下的如下方法獲取
GUILayout.Width, GUILayout.Height, GUILayout.MinWidth, GUILayout.MaxWidth, GUILayout.MinHeight, GUILayout.MaxHeight, GUILayout.ExpandWidth, GUILayout.ExpandHeight。

3、佈局元件:

佈局元件有兩個:GUILayout和GUILayoutUtility.
這裡要說一下GUILayout,這是個很牛X的元件。它有三大功能:創造控制元件、設定並獲取GUILayoutOption物件、和佈局控制元件的功能。
GUILayout的佈局功能有:插空白、垂直佈局、水平佈局、滾動檢視佈局、還一個窗口布局。混合巢狀這些佈局方式,基本上就要得到你想要的UI了。
GUILayoutUtility這個元件是GUILayout的一個補充,它提供了一個方法,在構造一個控制元件之前,先獲取它的矩形大小或先設定一個要使用的矩形大小。

六、說在最後的
1、上面我只大概說了一下UnityGUI系的UI元件的用法,其它的也差不多。
2、前面已經說了,UnityGUI系統可以分為相對四個獨立的部分。它們之間有共有的元件,有不同但相似的元件,也有隻用的於編輯器的元件。只要我們分開來學習,是不學混亂的。分合思想在應該也是很重要的學習方式!