前言
ui是必學(xué)的東西,這里主要學(xué)習(xí)ugui的常用控件,而學(xué)習(xí)必須要養(yǎng)成查看源碼的好習(xí)慣。。。。
知識參考:https://docs.unity3d.com/cn/2021.3/Manual/
提前說明,這是個人學(xué)習(xí)筆記,不是教程。
一、Canvas是什么?
Canvas故名思意就是UI的畫板,主要是控制UI的繪制的。在unity的ugui中,所有UI都必須是Canvas的子物體,而一個Canvas對象必須掛上以下幾個組件,Canvas組件、RectTransform組件、CanvasScaler組件、GraphicRaycaster組件。下面分別看看這些組件是干嘛的。順便附上一張截圖
1.Canvas組件
I.RenderMode字段,是控制UI的覆蓋方式,主要是三個選項。
選項一,Screen Space - Overlay
??按照選項的英文自己翻譯,屏幕空間覆蓋,那就是不管三七二十一直接覆蓋上屏幕上。就是說把UI層和世界空間層分開渲染,UI永遠(yuǎn)是最前面的那個。
選項二,Screen Space - Camera
??如果選擇這選項,就把把UI成發(fā)到攝像機的觀察空間了。比如說我們選擇好攝像機并且把設(shè)置好和攝像機的距離,如圖所示:
這里的意思是說,把UI發(fā)到攝像機朝向發(fā)現(xiàn)距離為100的地方處,但是我們以攝像機朝向距離為10的地方創(chuàng)建一個物體,那么這個物體就會對UI進(jìn)行遮掩。如下圖所示:
,還有一個問題就是,這個UI的顯示是依賴于攝像機的投影矩陣的,就是說選擇攝像機的正交模式的情況下,UI的所有的近大遠(yuǎn)小的效果都會失效。
選項三,World Space
??這個選項就是把Canvas放到世界坐標(biāo)里面,那么這種情況和普通的世界空間的其他物體沒上面區(qū)別,那么我們可以把Canvas作為某個物體的子物體,就可以實現(xiàn)以下的效果。
這樣就可以實現(xiàn)類似怪物頭頂血條的效果了。。。。。。。
II.Pixel Perfect的作用
是Canvas組件下的這個東西
它在RenderMode為 World Space的時候無法使用,開啟它主要是然UI的邊緣更加清晰化,當(dāng)然,這是要消耗性能為代價的。
III.需要注意的問題
首先先創(chuàng)建一張圖片和一個Cube,并且按照上面這種情況,發(fā)現(xiàn)UI層就會把游戲物體給擋住,如下圖所示:
我們再點開Cube的shader代碼,發(fā)現(xiàn)如下圖說是,Cube的著色器是開啟著深度測試的,那么Image把Cube的遮擋部分的像素會因為無法通過深度測試而被剔除掉,所以就不會產(chǎn)生overdraw,這種情況下還可以接受,Cube的stand shader如下:
深度測試的數(shù)值通常是無法提前預(yù)知的,所以Cube的一些像素是必需要通過片元著色器而通向測試部分的,不過我們倒是可以通過生成一張幀緩存,而提前知道屏幕的該像素點是UI的區(qū)域,且還需要判斷該UI透不透明,如果滿足不透明且是UI的區(qū)域而提前把Cube的像素在片元著色器階段剔除掉。(這里只學(xué)習(xí)UGUI,超綱了??)。
那么當(dāng)我們創(chuàng)建兩個Image并且在scene面板里打開overdraw模式的時候,發(fā)現(xiàn)兩張image重疊處會有點亮,如下圖所示:
再開UI默認(rèn)的著色器,如下圖。
發(fā)現(xiàn)UI默認(rèn)的著色器是把深度測試關(guān)上的,這意味著,重疊部分的像素,我們的顯卡對它進(jìn)行了兩次渲染,那么在開發(fā)UI的過程中需要時時刻刻避免這種情況的發(fā)生。比如上層UI打開的時候下層禁用掉。
2.CanvasScaler組件
英文直譯,畫布縮放器。故名思意就是控制畫布的大小被改變時,畫布的UI要如何改變,這個組件主要是用于制作UI的自適應(yīng)。
I.UI Scale Mode的選項
選項一. Constant Pixel Size
該選項是,無論屏幕大小如何改變,UI元素都只保持系統(tǒng)的像素大小。而這個選項。(幾乎所有的UI適配都是使用這個選項的)
這個選項下產(chǎn)生的Scale Factor屬性,主要用于縮放UI時,需要采用的這個系數(shù)再進(jìn)行縮放操作。
選項二.Scale With Scree Size
這個選項下,屏幕越大,UI元素也跟著越大。并且可以通過如下圖紅框里三個參數(shù)做一些趨勢性的操作。比如屏幕變大,由上面的匹配值來判斷修改UI的寬度、高度的權(quán)重值。(這個模式也很少使用)
選項三.Constant Physical Size
無論屏幕大小和分辨率如何,UI 元素都保持相同的物理大小。(這個模式幾乎不用)文章來源:http://www.zghlxwxcb.cn/news/detail-404738.html
該組件與RectTransform組件的共同作用
可以直接翻看這篇文章,講的相當(dāng)不錯:https://www.jianshu.com/p/dbefa746e50d
看完上面這篇文章完全就可以使用代碼來進(jìn)行UI適配了。。。。。。
在詳細(xì)點可以查看unity的官方手冊:https://docs.unity3d.com/cn/2021.3/Manual/script-CanvasScaler.html文章來源地址http://www.zghlxwxcb.cn/news/detail-404738.html
到了這里,關(guān)于【Unity基礎(chǔ)】ugui畫布篇(個人學(xué)習(xí))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!