unity之UGUI系統基礎
UGUI系統基礎
一.UGUI 簡介:
①.Unity3D4.6 版本開始,Unity 引擎內出現了一個自己的完整 UI 系統。在此之
前,國內 90%以上的 Unity 專案,專案 UI 介面都是使用 NGUI 外掛製作的。
②.舊版 UI:GUITexture,GUIText。
OnGUI:主要用於“Unity 介面擴充套件開發”,用於寫引擎外掛介面。
二.UGUI 遊戲物體:
①.基礎介紹
Unity 引擎將 UGUI 內的 UI 元件進行了簡單封裝,封裝成了一些簡單的 UI 遊
戲物體,這些遊戲物體是可以直接作為 UI 使用的。
②.建立步驟
步驟 1:在unity導航欄點選GameObject -> UI-> UI 遊戲物體
步驟 2:Hierarchy 面板點選滑鼠右鍵 -> UI -> UI 遊戲物體
備註:
這兩種操作步驟,都可以找到同樣的 UI 遊戲物體列表,點選即可創建出該物體。
開發過程中,一般使用的是步驟 2 這種方式,相對比較方便。
③.建立步驟分析
當我們使用上面的步驟在場景內創建出第一個 UI 遊戲物體的時候,會順帶出現
兩個其他遊戲物體:Canvas 和 EventSystem。【見圖】
Canvas:畫板,所有的 UGUI 遊戲物體,都必須是 Canvas 的子物體。否則,
UI 遊戲物體將無法正常渲染顯示。【見圖】
EventSystem:事件系統,UGUI 所有的操作事件都是由該遊戲物體處理。
如果場景內沒有該遊戲物體,UGUI 相關物體將無法操作。【簡單演示】
在Hierarchy 面板點選滑鼠右鍵 -> UI -> Button完成按鈕的建立,執行測試你會發現可以點選,測試完成後把EventSystem刪除掉,再次執行測試。
三.UGUI 元件:
①.基礎介紹
UGUI 系統中除了官方簡單封裝過的 UI 遊戲物體外,還提供了獨立的 UI 元件,
方便我們直接使用 UI 元件製作一些複雜的 UI 功能。
其實官方的簡單 UI 遊戲物體的封裝,使用的就是該區域的 UI 元件。
②.建立步驟
步驟:在unity導航欄Component -> UI -> UI 元件
備註:
這個 UI 元件列表,預設是灰色不可用狀態。
只有當你選中了遊戲物體後,該 UI 元件列表才是可用狀態。
③.建立步驟分析
在 Canvas 遊戲物體下,建立一個空的遊戲物體,選中它,然後給它新增相關
的 UI 元件。[見圖]
備註:
Canvas 遊戲下,建立的空物體,這些空物體身上預設存在 Rect Transform。
Rect Transform 繼承至 Transform,在原有的 Transform 元件的功能基
礎上,進行了新的功能擴充套件。
----------------------------------------------------------------------UGUI元件之Text文字----------------------------------------------------------------------
一.Text 遊戲物體組成部分
①Rect Transform:用於控制 UI 物體的基本屬性。
②Canvas Renderer:畫板 UI 渲染器,UI 遊戲物體必備且不可編輯的元件。
③Text 元件:當前 UI 物體的的核心元件。
④Default UI Material:預設 UI 材質球,UI 的顯示也是需要材質球的。
備註:
①②④是所有的 UGUI 遊戲物體必備的元件,其實 UI 的形態改變,就是通過使
用不同的 UI 元件來實現的。【見圖】
二.Text 面板屬性
Text:文字
控制當前的 UI 遊戲物體要顯示的文字內容。
Font:字型
控制文字顯示的樣子;Unity 支援的字型格式是 TTF 格式。
在企業專案開發中,一款遊戲,一般會使用到三到五款字型檔案。
Font Style:字型樣式
正常字型,加粗,傾斜,加粗並且傾斜。
這樣的字型樣式在 Word,Excel,Web 開發都是有的,最基礎的字型美化。
Font Size:字型大小
控制字型的顯示大小,但是當字型很大的時候,需要配合調整當前區域的寬和高,
否則字型將因為空間太小,無法顯示。
Line Spacing:行間距
當 Text 內的文字是多行資料的時候,控制行與行之間的間隔空隙。
Rich Text:富文字支援
勾選開啟後,我們可以在 Text 內編寫富文字標籤。
比如: <color=“red”>MkCode</color>
Alignment:對其方式
控制文字在區域內的九宮顯示位置。
Align By Geometry:是否支援圖文混排。
Horizontal Overflow:橫向溢位(對應X水平方向),當文字框內容超出文字框尺寸的時候,將Wrap更改為Overflow觀察效果。
Vertical Overflow:縱向移除(對應Y垂直方向), 當文字框內容超出文字框尺寸的時候,將Truncate更改為Overflow觀察效果。
Color:顏色
控制文字顯示的顏色。
Raycast Target:射線投射目標
當前遊戲物體是否接受射線,如果取消勾選,射線將會直接穿透該物體,勾選則
會阻擋射線。
備註:UGUI 的 UI 互動,是系統以滑鼠點選位置發射射線與 UI 進行互動的。
----------------------------------------------------------------------UGUI元件之Image圖片--------------------------------------------------------------------
一.Image 基本使用
①.Image 使用演示
Image 元件是用於顯示圖片資源的。
使用方式有兩種:1.顯示純粹的顏色;2.指定圖片源,用於顯示圖片。
注意事項:匯入 Unity 內的圖片資源,如果是用於 UI 顯示的,需要手動將這些
圖片的型別修改為Sprite(2D and UI)【見圖】
②.元件面板核心屬性
Source Image:設定用於顯示的圖片。
Color:設定用於顯示的顏色。
兩個“資料來源”可以分開使用,也可以同時使用,如果同時時候,顏色會改變圖
片的顯示色調。如果使用圖片,那麼顏色就要設定成白色,否則會影響圖片效果。
Set Native Size:設定圖片以原始尺寸顯示。
設定完圖片,首先就需要點選一下該按鈕,保證圖片是原始尺寸比例【見圖】
二.Image 四種顯示方式
Image Type:圖片顯示型別
Simple:簡單模式
Sliced:九宮模式
Tiled:平鋪模式
Filled:填充模式
①.Simple 簡單模式
Preserve Aspect:勾選後圖片會等比例進行縮放,不會變形。
測試:勾選該屬性,隨便調整圖片的寬和高,你會發現不管邊框多大圖片始終還是原圖的形狀。
②.Sliced 九宮模式
注意:預設的圖片是不支援該模式的,需要編輯圖片,設定圖片的九宮邊框。
設定邊框的步驟:
①選中圖片->屬性區域點選“Sprite Editor”;
②在編輯面板,設定圖片的 Border 邊框數值;
③設定完畢後,不要忘記點選 Apply 儲存操作【見圖】
將編輯後的圖片模式更改為 Sliced模式,取消Fill center屬性的勾選,觀察效果你會發現圖片有一塊兒區域鏤空了,這就是我們剛才編輯圖片的時候設定的可拉伸區域。【見圖】
③.Tiled 平鋪模式
設定成了該模式後,改變圖片區域的大小,圖片就會以瓷磚平鋪的方式進
行顯示。
如果使用的圖片設定了九宮邊框,則只會平鋪中間區域,不會平鋪邊框。
測試:將圖片的模式更改為Tiled平鋪模式,手動改變圖片尺寸,你會發現圖片只是平鋪了剛才編輯過的區域【見圖】
④.Filled 填充模式
Fill Method:填充方式;水平,垂直,或者角度量;
Fill Origin:填充起點;跟隨填充方式發生改變;
Fill Amount:填充量;0~1 表示從無到填充滿。
----------------------------------------------------------------------UGUI元件之Button按鈕-------------------------------------------------------------------
Button 簡單介紹:
按鈕是 UI 中最基本的互動方式;點選按鈕後,觸發相應的程式碼邏輯。
最常用的使用場合有兩個:
①點選按鈕後載入一個新的場景;
②點選按鈕後彈出或者關閉一個 UI 面板。
按鈕組成分析
一個按鈕遊戲物體是由三個 UI 元件組合實現的:Text,Image,Button【見圖】
無論多複雜的 UI 介面,最終都是可以分解成簡單的 UI 元件的。
一.Button 面板屬性
①.基本屬性
Interactable:是否可用,表示當前的按鈕是否可以互動。
Transition:過渡,是一個列舉,分別是Color Tint 、Sprite Swap和Animation。
專案開發過程中,最常用的就是圖片過渡方式,按鈕互動過程中,切換不同的圖
片進行狀態的展示。
②.顏色過渡(Color Tint)
Normal Color:預設顏色
Highlighted Color:高亮顏色
Pressed Color:按下顏色
Disabled Color:不可用顏色
③.圖片過渡(Sprite Swap)
Target Graphic:預設圖片,按鈕要控制改變的元件。
Highlighted Sprite:高亮圖片,滑鼠進入就會觸發;點選按鈕後,如果不點
擊其他位置,則一直觸發。專案開發過程中,該圖片可以為空。
Pressed Sprite:按下圖片,滑鼠按下切換成該狀態。
Disabled Sprite:不可用圖片,按鈕禁用後顯示的圖片。
④.動畫過渡(Animation)
Normal Trigger:預設動畫狀態
Highlighted Trigger:滑鼠進入後按鈕的動畫狀態
Pressed Trigger:滑鼠按下後的按鈕動畫狀態
Disabled Trigger:按鈕不可用時的動畫狀態
Navigation:當你有兩個或者兩個以上的按鈕時會在倆者之間顯示視覺化導航線,是一個列舉分別為:None(沒有)、Horizontal(水平方向的)、Vertical(垂直方向的)、Automatic(自動的)、Explicit(明確的)
測試準備:
1.建立五個按鈕分別命名為Center、Up、Down、Left、Right
2.調整上、下、左、右,四個按鈕的位置
3.將Center按鈕的Navigation選項更改為Explicit模式
4.將對應的按鈕拖拽到對應的選項內,點選Visualize按鈕觀察效果【見圖】
二.Button 事件繫結
1.事件繫結介紹
當我們點選按鈕後,需要執行程式碼邏輯,這個程式碼邏輯,往往封裝到一個方法內,
然後和當前按鈕的單擊事件進行繫結。
2.屬性面板繫結【不推薦使用】
①建立一個指令碼命名為TestButtonClick,掛載到按鈕遊戲物體上,編寫一個無參無返回值且公開的方法;
②屬性面板上的 OnClick 面板新增一個新的項;
③拖拽當前的這個指令碼賦值給新新增的項;
④在 Function 的位置找到剛才建立的指令碼對應的方法。
最後執行測試,觀察控制檯的輸出資訊。
3.程式碼繫結【推薦使用】
①重新建立一個Button,把剛才建立的指令碼掛載到這個Button身上
②在指令碼內編寫一個無參無返回值且私有的方法;
③程式碼查詢到 Button 遊戲物體並存儲為物件;
④Button 物件 .onClick.AddListener(方法名)。
執行測試你會發現和剛才的效果一模一樣。
----------------------------------------------------------------------UGUI元件之Toggle複選框----------------------------------------------------------------
Toggle 組成部分分析:
Toggle 元件 [核心元件,用於控制整個 UI 遊戲物體]
|---Image 元件 [背景圖片]
| |---Image 元件 [複選標記,只要當選中時,該圖片才會顯示]
|---Text 元件 [功能文字描述]
Toggle 元件屬性
①.基本屬性
Toggle 元件和 Button 元件是比較類似的,因為他們兩個都是通過單擊來改變
狀態。也就意味著它們兩個在元件屬性方面,有很大一部分是一樣的。
Toggle 和 Button 相似的元件屬性,我們就不需要重複學習了,直接套用學習
Button 元件時已經掌握的知識即可。【用已知消化未知】
②.特有屬性
Is On:表示當前 Toggle 的狀態,是選中還是未選中。另外該屬性只是響應
UI 的狀態切換,在面板上操作該屬性不會影響 UI 狀態。
Target Graphic:對應的是 Toggle 的背景圖;
Graphic:對應的是 Toggle 的選中圖。
Group:管理Toggle開關的切換
測試控制兩個Toggle按鈕互相切換:
1.在Canvas下面建立一個空物體命名為ToggleGroup並新增Toggle Group元件
2.在建立兩個Toggle按鈕分別命名為Toggle1和Toggle2,然後拖拽作為ToogleGroup的子物體
3.分別選中Toggle1和Toggle2將Is On屬性的勾去掉,然後將ToggleGroup拖拽到Gruop選項上
----------------------------------------------------------------------UGUI元件之Slider滑塊----------------------------------------------------------------
一.Slider 元件介紹
①.Slider 介紹
在開發過程中常用於“控制大小”,比如說播放器(視訊/音訊)軟體的音量控制。
其實 Unity 引擎介面上就有很多 Slider 元件。Project 面板的資源大小預覽滑
塊;Game 面板畫面比例縮放滑塊。
②.Slider 組成部分分析
Slider 元件 [核心控制組件]
|---Background 元件 [Slider 的背景圖片]
|---Fill Area [用於控制填充圖片的活動範圍]
|---Fill元件 [填充圖片]
|---Handle Slider Area [用於控制滑塊圖片的活動範圍]
|---Handle元件 [滑塊圖片]
二.Slider 元件屬性
①.基本屬性
Slider 元件的一部分屬性和 Toggle,Button 是一樣的。
需要通過單擊操作來觸發的 UI 元件,他們都有一部分屬性是相同的。
②.特有屬性
Fill Rect:滑塊條遊戲物體的 Transform;
Handle Rect:滑塊遊戲物體的 Transform;
Direction:滑塊的滑動方向;
Min Value:滑塊元件最小值;
Max Value:滑塊元件最大值;
Whole Numbers:整數,勾選後 Slider 只能整數控制;
Value:當前滑塊元件的值。
----------------------------------------------------------------------UGUI元件之ScrollBar捲動條----------------------------------------------------------
Scrollbar 組成部分分析
Scrollbar Image [整體功能控制 + 背景圖片顯示]
|---空物體 [控制子物體活動範圍]
|---Image [滑塊圖片]
ScrollBar元件特有屬性
Size:用於控制滑塊的大小;
Number Of Steps:用於控制滑塊每次移動的步長。
----------------------------------------------------------------------UGUI元件之InputField輸入欄----------------------------------------------------------
一.InputField 元件介紹
①.InputField 介紹
InputField:輸入欄,輸入框。
輸入欄的主要用途是接收使用者輸入的單行資料,常見於輸入使用者名稱,密碼。
現階段在遊戲專案的 UI 介面開發中,尤其是手遊,輸入欄元件並不常用。因為
現在大部分手遊是直接接入騰訊,微信,360 之類的第三方登入介面。
但是在其他開發方向卻大量使用,比如:網站後臺程式,網站前臺頁面。
②.InputField 組成部分分析
InputField Image [整體控制組件,背景圖片]
|---Placeholder Text [提示文字]
|---Text [接收使用者輸入的文字]
二.InputField元件特有屬性
Text Component:用於接收顯示使用者輸入內容的 Text 元件;
Text:在該區域輸入的文字會直接顯示在 Text 元件上;
Character Limit:字元限制,表示該輸入框能輸入的最大長度,0 表示不限制;
Content Type:內容型別,用於限制輸入的資料型別;
|---Standard:標準的,任何字元都可以輸入
|---Autocorrected:自動校正,自動更正確定輸入是否跟蹤未知單詞,並向用戶建議一個更合適的替代選項,自動替換鍵入的文字,除非使用者顯式地重寫該操作(官方解釋,本人也沒看懂)。
|---Integer Number:整數,只允許輸入整數。
|---Decimal Number:小數,只允許輸入小數。
|---Alphanumeric:字母數字,只允許輸入字母和數字,不能輸入符號。
|---Name:名字,自動大寫每個單詞的第一個字母。注意,使用者可以使用Delete鍵繞過大寫規則。
|---Email Address:電子郵箱,允許使用者輸入郵箱格式的內容。
|---Password:密碼,將使用者輸入的內容隱藏起來,用*號代替。
|---Pin:整數,之允許使用者輸入整數,用*號代替。
|---Custom:自定義,允許您自定義行型別、輸入型別、鍵盤型別和字元驗證。
Line Type:行型別,用於設定輸入欄是單行還是多行;
|---Single Line:單行模式,也是預設模式;
|---Multi Line Submit:多行,不支援回車鍵換行;
|---Multi Line NewLine:多行,支援回車鍵換行。
|---Placeholder:佔位符,輸入框預設狀態下顯示的內容。
|---Caret Blink Rate:插入符號閃爍速度,定義放置在行的標記的閃爍速率。
|---Custom Caret Color:是否開啟自定義插入符號的顏色設定面板。
|---Selection Color:選取的顏色,選定文字部分的背景顏色。
|---Hide Mobile Input:隱藏手機輸入,隱藏連線到移動裝置螢幕鍵盤的本地輸入欄位。注意,這隻適用於iOS裝置。
|---Read Only:是否只讀。
三.InputField 事件繫結
①.On Value Changed(string)噹噹值改變事件事件(也就是說使用者在輸入框輸入內容的時候執行)
②.On End Edit(string)當停止編輯後的事件(退出執行模式後或者游標焦點切換到下一個輸入框的時候執行)
程式碼演示:
----------------------------------------------------------------------UGUI元件之Scroll View捲動區域------------------------------------------------------
一.ScrollRect 元件介紹
①.ScrollRect 介紹
“捲動區域”是在 ScrollBar 的基礎之上延伸出來的 UI 介面效果。
單獨是 ScrollBar 元件是無意義的,需要結合 ScrollRect 才能真正實現功能。
②.ScrollRect 組成部分分析
Scroll View :Image [核心元件,背景圖片]
|--- Viewport : Mask Image [遮罩,用於遮罩的圖片]
|---Content:空物體 [用於捲動顯示的資料]
|---Scrollbar Horizontal:橫向捲動條 [ScrollBar 遊戲物體]
|---Scrollbar Vertical:縱向捲動條 [ScrollBar 遊戲物體]
二.ScrollRect 元件屬性
Content:ScrollRect 控制的資料區域;
Horizontal:控制資料是否可以橫向拖動;
Vertical:控制資料是否可以縱向拖動;
Movement Type:三種運動型別;[不限制 -- 彈性 -- 不動]
Elasticity:靈活性,這是彈性模式下的彈跳量。
Inertia:慣性,當設定慣性時,當指標在拖動後被釋放時,內容將繼續移動。當慣性未設定時,內容只會在拖動時移動。
Deceleration Rate:減速率,當設定慣性時,減速速率決定了內容停止移動的速度。速率為0將立即停止移動。值為1意味著移動永遠不會慢下來。
Scroll Sensitivity:靈敏度,對滾動輪和跟蹤盤滾動事件的敏感性。
Viewport:視口區域的引用;
Horizontal Scrollbar:橫向滾動區域遊戲物體的引用;
Visibilty:捲動條的清晰度,當不需要滾動條時,是否應該自動隱藏滾動條,以及可選地展開檢視。
Spacing:控制捲動條和資料區域之間的間距。
Vertical Scrollbar:縱向滾動區域遊戲物體的引用;
Visibilty:捲動條的清晰度,當不需要滾動條時,是否應該自動隱藏滾動條,以及可選地展開檢視。
Spacing:控制捲動條和資料區域之間的間距。
----------------------------------------------------------------------UGUI元件之Canvas畫布------------------------------------------------------
一.Canvas 元件介紹
Canvas 元件的用途是用於 UGUI 系統內的 UI 遊戲物體的渲染。
如果沒有該元件,所有的 UGUI 遊戲物體都將無法顯示。
而 Canvas 元件本身又分為三種渲染模式:
①Screen Space - Overlay
②Screen Space - Camera
③World Space
這三種渲染模式分別用於不同的渲染需求,Canvas 元件上其餘的屬性都是根
據我們選擇的不同的渲染模式,而跟隨發生改變的。
也就是說:不同的渲染模式,對應不同的控制屬性。
二.Screen Space - Overlay 模式
1.模式介紹
該模式全稱是 Screen Space-Overlay(螢幕空間-覆蓋模式)。
螢幕空間:指的是電腦或者手機顯示屏的 2D 空間,x 軸和 y 軸;
覆蓋模式:指的是 UI 元素永遠在 3D 元素的前面,UI 覆蓋 3D;
Canvas 創建出來後,預設就是該模式。
[簡單演示]
①.建立一個Cube三維模型,然後將位置歸零
②.建立一個Image,執行觀察效果,是否是UI物體在3D物體的前面
備註:該模式和攝像機無關,即使場景內沒有攝像機,UI 遊戲物體照樣渲染。
在 Overlay 模式下,UGUI 和攝像機無關。
2.相關屬性
Pixel Perfect:完美畫素,UI 和螢幕畫素對應,UI 圖片不會出現鋸齒邊緣;
Sort Order:排序層,用於設定畫布的深度層級(場景存在多個 Canvas 時);
在同一個場景內是允許出現多個 UGUI 的 Canvas 畫布
測試準備:
①.分別建立倆個Canvas並命名為Canvas1和Canvas2,然後分別在這兩個Canvas下面建立圖片並將其中一個圖片更改為紅色,層級結構如下圖:
②.然後選中Canvas2將它的Sort Order更改為1,你會發現紅顏色的圖片優先被渲染了。
注意事項:這兩個Canvas的模式必須保持一致才起效果。
Target Display:目標顯示屏(對應的就是Game檢視的Display選項)
Additional Shader Channels:附加的材質通道。
三.Screen Space - Camera模式
①.模式介紹
該模式全稱是 Screen Space-Camera(螢幕空間-攝像機模式)。
攝像機模式:設定成該模式後,需要指定一個攝像機遊戲物體,指定完畢後,
UGUI 就會自動出現在該攝像機的“投射範圍”內。
如果現在隱藏掉攝像機遊戲物體,UGUI 也是無法渲染顯示的。
②.相關屬性
Render Camera:渲染攝像機,指定用於渲染 UGUI 元素的攝像機;
Plane Distance:面板距離,控制 UGUI 元素和攝像機之間的距離。
四:WorldSpace 模式
①.模式介紹
該模式全稱就是 WorldSpace(世界空間模式)。
世界空間模式:是相對於螢幕空間而言的,世界空間是 x,y,z 三個軸向。
設定成該模式後,UGUI 就相當於是場景內的一個普通的“Cube 遊戲模型”,
我們是可以在場景內任意的移動 UGUI 元素的位置。
②.應用場景
3D 模式的跟隨血條;
VR 專案開發中的場景 UI。
----------------------------------------------------------------------UGUI元件之Canvas Scaler畫布定位器-----------------------------------------------
一.Canvas Scaler 元件介紹
在 Unity 專案開發過程中,尤其是手遊專案,UI 介面的開發工作量是很大的。
對於 UI 介面有一個很關鍵的技術,叫做“螢幕自適應”,就是說我們的遊戲 UI
要能自動適配不同的螢幕比例和螢幕尺寸。
在 UGUI 中用於實現“螢幕自適應”需要用到兩個元件:
①AnChors [錨點] ②Canvas Scaler [畫布定位器]
這兩個元件配合使用,才能相對完美的實現 UI 螢幕自適應的開發需求。
Canvas Scaler 元件有三種定位模式:
①Constant Pixel Size
②Scale With Screen Size
③Constant Physical Size
二.Constant Pixel Size 模式
①.模式介紹
該模式可以稱之為“恆定(固定)畫素大小模式”,UGUI 預設就是該模式。
該模式下的 Scale Factor 引數會作用於 Canvas 遊戲物體的 Scale 引數。
在該模式下無論螢幕尺寸發生什麼樣的變化,UI 元素的大小都不會改變。
②.相關屬性
Scale Factor:比例因子,預設保持為 1 即可;
Reference Pixels Per Unit:參考畫素單位,預設保持為 100 即可。
三.Scale With Screen Size 模式
①.模式介紹
該模式可以稱之為“跟隨螢幕尺寸縮放模式”,在手遊專案開發中,使用該模式。
該模式下 UI 元素的尺寸就不是固定的了,會跟隨螢幕的尺寸比例進行相應的自動
縮放。
②.相關屬性
Reference Resolution:參考解析度,設定成專案開發時使用的解析度。
Screen Match Mode:螢幕匹配模式,推薦用第一種模式。
|---Match Width Or Height [匹配寬度或者高度]
|---Expand [擴大] ---Shrink [縮小]
Match:匹配,當螢幕匹配模式選擇為 Match Width Or Height 時該屬性有效。
一個滑塊控制條,0~1,代表寬和高。
橫屏遊戲用 Height 匹配,豎屏遊戲用 Width 匹配[以短方向進行匹配]。
四.Contant Physical Size 模式
該模式可以稱之為“恆定(固定)的物理尺寸”,在該模式下 UI 元素永遠保持固定
的物理尺寸,使用場合較少 。
此文章只是為了記錄一下學習筆記,如有不足還望多多指點!