Unity的GUI包
在Unity中完成2D界面 有兩種方式
有自帶的GUI 還有開源的第三方包NGUI 其中 NGUI被Unity廣泛使用
在Unity5.x之後 Unity和NGUI聯合開發了UGUI
因此 Unity已經內置了UGUI
🚩在3D世界顯示2D元素
在Unity中 3D的單位是m(米) 而2D的單位是px(像素)
有兩種方式可以實現在3D世界顯示2D元素:
-
1、使用正交攝像機
(參看Unity學習筆記(06):Camera攝像機、透視攝像機和正交攝像機、光源、烘培模式) -
2、使用透視攝像機 將2D元素移動到合適的距離
移動到一個合適的位置 使得能夠全屏顯示該畫面
創建一個2D精靈元素Sprite
在Hierarchy右鍵 -> 2D -> Sprite
將圖片的類型改爲2D:
記得點擊Apply應用
Pixels Per Unit定義了多少像素爲1世界單位
100 即意爲 100像素爲世界的1m(米)
再將圖片拖到Sprite節點的Renderer/Sprite即可:
計算Sprite和Camera相距多少才能完全充滿屏幕
公式:
z=h/(2*tanθ)
z=距離
h=屏幕高度
θ=屏幕張開角
由於屏幕張開角爲60°
屏幕高度爲1600px=16m
因此 z=h/(2tan30°)=16/(2tan30°)≈13.4
還有另一個方式:
若在更遠或更近的距離 則精靈圖進行縮放
比如 在18m的距離 在13.4能夠全屏 則縮放值爲18/13.4≈1.34
這樣計算 比較複雜 而UGUI正能解決該問題
十一、Canvas
UGUI提供了Canvas節點 該節點負責2D元素的比例縮放
以Canvas爲根節點的UI樹 所有UI元素都掛在這棵樹上 對Canvas進行比例縮放以實現正確顯示2D元素
UGUI下面除了Canvas 還有控件和時間響應 如此 組成了UGUI體系
Unity將所有UGUI元素放入UI標籤下了 因此 若要創建 只需要在Hierarchy右鍵 -> UI -> Canvas即可創建Canvas
與此同時還會自動創建一個EventSystem 該節點用於接收UI事件
當然 創建UI下的任何物體 都會自動帶上Canvas父節點
🚩Canvas的組件
Canvas下帶有四個組件:
Rect Transform
每個節點都需要帶有transform組件 而Rect Transform繼承自transform
Canvas的transform一旦被創建 則無法進行任何修改
Canvas
Canvas繪製2D元素的設置
Render Mode的 Screen Space - Overlay
是覆蓋到屏幕上
在畫完所有物體後將該層覆蓋到屏幕的最上方
Camera即使隱藏了 或者無法拍攝 2D元素照樣能夠顯示
Pixel Perfect 顯示像素
勾選上後 顯示像素會更加好
Target Display控制繪製到哪個屏幕上
Canvas Scaler 控制2D元素的縮放策略
Constant Pixel Size根據像素控制
Constant Physical Size根據物理尺寸控制
Scale With Screen Size根據屏幕尺寸控制
縮放公式:
Match是縮放因子 控制根據什麼縮放
Graphic Raycaster與事件碰撞相關
在Canvas下創建一個Image節點 即可將圖片顯示其上了
Render Mode的 Screen Space - Camera
是由攝像機拍攝
此時由於沒有選擇Camera 因此無效
因此需要選擇一個用於渲染的攝像機:
此時Camera隱藏 則2D場景也無法顯示了
Plane Distance決定了2D和3D物體的遮擋關係
若該值大於3D元素和攝像機的距離 則3D元素會顯示在2D元素的前方
反之 若該值小於3D元素和攝像機的距離 則3D元素會顯示在2D元素的後方
Render Mode的 World Space
是使用世界空間
此時距離會自動換算
World Space是自己控制縮放的比例 自己計算
可以將2D元素和3D元素融合在一起
🚩Image組件
用於顯示非交互式的組件
可以添加材質:
此時圖片無需精靈圖了:
創建一個材質球 Create -> Material
拖入即可使用: