本篇部落格主要是介紹Unity中幾種常用的UI模式,UI是使用者互動的第一步,也是最重要最直觀的一步。
並不做過多的深入範例使用啦,簡單介紹下吧
UI即User Interface(使用者介面)的簡稱。泛指使用者的操作介面,UI設計主要指介面的樣式,美觀程度。
而使用上,對軟體的人機互動、操作邏輯、介面美觀的整體設計則是同樣重要的另一個門道。
好的UI不僅是讓軟體變得有個性有品味,還要讓軟體的操作變得舒適、簡單、自由,充分體現軟體的定位和特點。
據我所知Unity中有兩種自帶的UI,一種是UGUI,另一種是GUI
Legacy GUI:舊版 UI,只有兩個元件:文字和圖片,配合滑鼠事件來實現介面的 UI,非常的簡單
還有的就是一些第三方UI外掛了,比如NGUI、FairyGUI都是用的比較多的一種了。
主流應該還是UGUI用的比較多,下面就分別的介紹一下它們
GUI是Unity之前的版本使用的UI模式,只能通過使用程式碼來建立文字、按鈕、圖片等控制元件
指令碼繼承Monobehaviour之後,在OnGUI()方法中新增各種元件就可以了
因為這種UI方式用的人也比較少了,我也沒有使用太多,所以就不多做介紹了
下面用一段程式碼範例來簡單做個範例方便理解吧
void OnGUI()
{
GUI.Box(new Rect(10, 10, 100, 90), "Loader Menu");
if (GUI.Button(new Rect(20, 40, 80, 20), "Level 1"))
{
print("使用者單擊了Level 1按鈕");
}
if (GUI.Button(new Rect(20, 70, 80, 20), "Level 2"))
{
print("使用者單擊了Level 2按鈕");
}
}
簡介
UGUI 是Unity 官方推出的最新UI系統。它從 Unity 4.6 開始,被整合到 Unity 的編輯器中。相較於舊的 UI 系統,它絕對屬於一個巨大的飛躍!
因為只要有過舊 UI 系統使用體驗的開發者,大部分都對它沒有任何好感,以至於在過去的很長一段時間裡,大家都在使用資源商店(Asset Store)裡,由第三方開發者開發的付費外掛 NGUI,實現遊戲中與 UI 相關的功能部分。
隨著 UGUI 的不斷完善慢慢的也有公司使用 UGUI 來編寫遊戲的介面 UI,也是目前使用人數最多的一種UI
UGUI優點
來簡單說一下 UGUI 的三個優點:靈活、快速、視覺化
對於開發者帶來的好處則是:執行效率高、執行效果好易於使用、方便擴充套件(新 UI 系統程式碼開源)與 Unity 的相容性高
建立UI控制元件方法
在Hierarchy面板上右鍵UI->UI元件
下圖所示,應該就是 UGUI 目前所有的UI元件了。
下面來依次介紹一下幾種UI控制元件的屬性
前半部分和Button元件一樣的引數。
前半部分和Button元件一樣的引數。
Canvas是用於佈局和放置UI控制元件的畫布,每當第一次建立UI控制元件時,Unity都會預設建立一個Canvas畫布。
所有的UI控制元件都必須位於Canvas之內,不然就看不到這個控制元件啦
關於畫布的幾種模式,在很早之前寫過一篇做過簡單介紹,感興趣的可以看一下
Unity3D之UGUI基礎–畫布的三種模式
個人感覺就是一張建立時自動鋪滿Canvas的Image,與Image使用無差別
設定垂直和水平卷軸,這裡一定需要通過卷軸的On Value Changed事件回撥來將卷軸的值變化與Scroll Rect的捲動進行關聯。
和Canvas一樣,在UI中必須存在的,否則無法進行互動等操作。
如果你使用 UI 系統,那麼 EventSystem 物件會自動建立。這個物件負責監聽使用者輸入。預設情況下,在電腦上可以使用鍵盤和滑鼠輸入,在移動裝置上可以使用觸控輸入。但是如果你要為surface這樣的裝置開發,你也可以同時啟用兩種輸入。當需要遮蔽使用者輸入時,將此物件關閉即可。UnityEngine.EventSystems.EventSystem.current 儲存了當前活動的 EventSystem 物件。
有眼睛靈光的小夥伴可能發現了Text、Button、Dropdown、InputField這幾個元件還有一個帶TextMeshPro字尾的元件
TextMeshPro是用於修改自定義字型相關的元件,如果想讓字型有更多的擴充套件,可以選擇帶TextMeshPro的相關元件
在這裡值得一提的是Unity中的UI使用的是RectTransform,並非Transform
RectTransform
Unity UI 系統使用 RectTransform實現基本的佈局和層次控制。RectTransform 繼承於 Transform,所以 Transform 的所有特徵 RectTransform 同樣擁有。
在 Transform 基礎上,RectTransform增加了 軸心(pivot)、錨點(實際上是用 anchorMin、anchorMax兩個點定義的矩形區域)、和尺寸變化量(sizeDelta)。軸心:表示UI元素的中心,使用相對於自身矩形範圍的百分比表示的點位置,這會影響定位、縮放和旋轉。
錨點:相對於父級矩形的子矩形區域,這個矩形各個邊界值使用百分比表示。
尺寸變化量:相對錨點定義的子矩形的大小變化量,與錨點定義的子矩形合併後的區域才是最終的UI矩形。
在 Inspector 介面上,為了更方便的調節 RectTransform 的屬性,錨點的兩個點重合時會顯示位置和寬高(直接調節位置和sizeDelta),否則顯示相對錨點矩形邊界的偏移量(通過計算後再賦值給位置和sizeDelta)。
在程式中,RectTransform 新增了 anchoredPosition 和 rect 屬性來更方便的程式設計。
RectTransform 元件同樣負責組織 GameObject 的層級關係。在 UI 系統中,子級 UI 物件總是覆蓋顯示在父級 UI 物件上;層級相同的 UI 物件,下方的 UI 物件總是覆蓋顯示在上方的 UI 物件上。這樣的設計避免了繁瑣的深度設定。
在程式中,Transform 新增了SetSiblingIndex、GetSiblingIndex、SetAsFirstSibling、SetAsLastSibling 這些方法來方便的修改物體的層級順序。
UGUI部分內容參考文章:https://blog.csdn.net/qq_37601496/article/details/77646348
在Canvas中的UI元素,以它們出現在層次中的順序被繪製。
第一個子物件被先渲染,然後第二個,以此類推。如果兩個UI元素重疊,後一個將出現在前一個上面。
要改變某個元素出現在另外元素的上面,只要通過拖拽它們改變在層次中的順序幾個。
通過使用在Transform元件中的這些方法,也可以從指令碼中控制順序:SetAsFirstSibling, SetAsLastSibling, 以及SetSiblingIndex 。
比如上面Canvas下的元件,渲染順序:1-2-3-4-5,顯示順序(最上層):5-4-3-2-1
意思就是先渲染的UI在互相交叉一起的時候會被後渲染的給覆蓋掉,所以上面UI如果發生重疊,5就是在最上面,以此類推
是一個老牌的unity UI外掛了,在 UGUI 沒有推出之前,大部分unity的遊戲都使用的NGUI外掛開發UI,它的好處很多,提供了常見的UI控制元件,實現幾乎所有需要的功能,在效率上也是控制嚴謹,DrawCall合併極大提升了控制元件渲染效率,還支援3D GUI
但是也有很多不足,版本更新太頻繁,版本bug很多,對於瞭解NGUI的開發者可以很好利用它,但對於初學者來說,NGUI固然容易上手好用,但是對DrawCall的重建規則不瞭解,仍然會效率低下。
NGUI不是Unity引擎自帶的UI,而是一個第三方外掛,需要在商店購買然後匯入使用。
在 UGUI 出來之前就存在了,那個時候由於GUI並不是很好用,所以多數人喜歡用這個NGUI開發專案,所以這個NGUI使用起來應該還是不錯的。
因為我之前也沒用用過NGUI,所以這裡也是下載了一個NGUI的外掛,從網上找教學然後來做一下,然後簡單總結一下使用體驗(寫部落格好難~)
匯入NGUI外掛匯入後,選單欄就出現這個NGUI啦,然後點選就可以做事情了
UIRoot用於縮放UI
ScalingStyle縮放模式:來進行UI大小的自適應Flexible大小不變,Constrained進行大小自適應,ConstrainedOnMobiles只在行動端進行大小自適應.
使用自適應可以在不同解析度下,UI的相對大小保持不變.
UICamera用於事件監測
讓帶有這個元件的攝像機渲染出來的物體能夠接受NGUI事件
EventMask:事件層遮罩。用來管理相應那些層的物體的事件。
UIPanel提供一個畫布
在UIPanel中我們不能將不同的Panel的Depth設定為同一個,否則會出現警告.
//通過委託事件在NGUI中給Texture新增點選事件
//使用UIEventListener的靜態方法Get()進行事件的繫結
/// <summary>
/// Get or add an event listener to the specified game object.
/// </summary>
static public UIEventListener Get (GameObject go)
{
UIEventListener listener = go.GetComponent<UIEventListener>();
if (listener == null) listener = go.AddComponent<UIEventListener>();
return listener;
}
UIEventListener.Get(btnStop).onClick = stopVideo;
UISprite先將將圖片載入成圖集
先選擇Atlas在選擇其中的Sprite
sp = gameObject.GetComponent<UISprite>();
//設定圖集
sp.atlas = atlas;
//修改圖片
sp.spriteName = "back";
//設定圖片填充模式
sp.type = UIBasicSprite.Type.Filled;
sp.fillDirection = UIBasicSprite.FillDirection.Horizontal;
sp.fillAmount = 0.5f;
//設定圖片顏色
sp.color = Color.red;
uILabel = GetComponent<UILabel>();
uILabel.text = "Who is your daddy??";
uILabel.fontSize = 60;
uILabel.effectStyle = UILabel.Effect.Shadow;
StartingState初始狀態
Group值的Toggle組,來控制一組Toggle
//給Slider新增OnValueChange的事件
uISlider.onChange.Add(new EventDelegate(silderChange));
UIPlayTween:控制的物體含有兩個以上Tween動畫的使用使用,或者要控制多個動畫中的一部分的時候使用.
NGUI相關是從網上教學看來的,因為實在沒時間挨個測試啦,而且現在使用 UGUI 完全可以滿足我們的開發啦,這裡就簡單提一下好啦
感謝原文章大佬,原文連結:https://blog.csdn.net/Game_Builder/article/details/93008722
還有一款跨平臺UI編輯器,組合各種複雜UI元件,以及為UI設計動畫效果,無需編寫程式碼,可以一鍵匯出Unity,Starling,Egret,
LayaAir,Flash等多個主流應用和遊戲平臺。
特性:
簡單說了 UGUI 和NGUI的介紹,那麼久拿這兩個最為常用的UI來做一個對比好了,也能讓我們更加深入瞭解一些這方面的知識~
UGUI 是官方4.6以後推出的一套UI元件,相對於之前的GUI倒是改頭換面了,視覺化操作,便捷、省心。
NGUI則是unity一直以來最強的UI外掛(沒有之一),甚至還是官方新UI的導師。
最後,強大的網友分享了一張比較全面的對比圖(點選圖片放大):
UGUI 由於是Unity原生支援的,所以使用上會更加的人性化。並且伴隨著版本升級功能會越來越強,逐漸將成為主流ui方案。
NGUI是 UGUI 出現之前的產物,通過MeshRenderer來實現類似CanvasRenderer的功能,概念上有點蹩腳。作為一個外掛雖然已最大努力讓UI開發工作變得簡單,但相比能夠讓UnityEditor做出相應修改的 UGUI (如RectTransform的出現),其易用性是沒法比的。
綜合來說,新的專案建議使用 UGUI ,學習成本不高,工具流更有助於提高開發效率。
關於Unity的UI外掛還有挺多,這裡就對比幾種常用的做個簡單介紹,並沒有過多深入,不懂的地方還是借鑑的大佬文章,所以如果出紕漏還請原諒啦。正常使用Unity開發使用 UGUI 就足夠啦,後面會單獨深入介紹 UGUI 的~
FairyGUI下載連結
NGUI下載連結
如果積分不夠用的就用這個下載叭~連結 —提取碼:4jhw
看完覺得有用可以給博主來個三連呀~謝謝