網(wǎng)站建設(shè)費(fèi) 什么科目鄭州seo網(wǎng)站有優(yōu)化
參考文檔:畫布 - Unity 手冊(cè)?
Canvas組件:畫布組件是進(jìn)行 UI 布局和渲染的抽象空間。所有 UI 元素都必須是附加了畫布組件的游戲?qū)ο蟮淖訉?duì)象。
? ? ? ? 參數(shù):
????????Render Mode 渲染模式:Screen Space - Overlay、Screen Space - Camera、World Space。
? ? ? ? Pixel Perfect:是否應(yīng)該無鋸齒精確渲染 UI?
? ? ? ? Sort Order:渲染層級(jí)
? ? ? ? Target Display:輸出屏幕目標(biāo)Display 1
? ? ? ? Additional Shader Channels:額外的著色器通道
Screen Space - Overlay
????????畫布渲染于所有物體上方,即最后渲染。并且不歸于攝像機(jī)渲染,因此即使沒有攝像機(jī)也能渲染出UI。
????????
????????畫布寬高跟隨屏幕寬高,畫布大小固定(1,1,1),位置屏幕居中,覆蓋整個(gè)屏幕。
????????畫布下的子UI需使用錨點(diǎn)適配來適應(yīng)不同大小的屏幕,因屏幕變化后畫布也會(huì)變化。
Screen Space - Camera
? ? ? ??畫布內(nèi)容歸于攝像機(jī)進(jìn)行渲染。與正常渲染物體一樣。
????????
? ? ? ? 由于有2個(gè)攝像機(jī),因此有2個(gè)Render.OpaqueGeometry以及2個(gè)Camera.RenderSkybox。若將UI攝像機(jī)的Clear Flags從Skybox改為DepthOnly,則會(huì)減少1個(gè)Camera.RenderSkybox。
? ? ? ? UI渲染主要位于Render.TransparentGeometry中
????????
Image默認(rèn)材質(zhì)著色器UI/Default會(huì)將渲染目標(biāo)交到TempBuffer 355 1920*1080目標(biāo),著色器是支持SrcAlpha OneMinusSrcAlpha的常見透明因子混合,并存在深度測(cè)試小于等于(<=),不寫入深度。(一般情況透明物體是不開啟深度測(cè)試的,而這里開啟的目的是為了能被3D物體遮擋)
規(guī)范做法:
主攝像機(jī)屏蔽UI層渲染
UI攝像機(jī)僅渲染UI層
將3D物體設(shè)置到UI層
此時(shí)若想把Cube渲染在UI之上,那么就是直接放到Canvas物體前面即可。
Canvas距離UI攝像機(jī)的距離由下圖參數(shù)Plane Distance決定(默認(rèn)100)
若放在Canvas后面則是被遮擋。
UI攝像機(jī)不一定是正交的,即使換成透視視角,依然是保持正常的UI顯示(畫布會(huì)縮放大小)并3D物體以透視視角渲染出來。
但透視視角會(huì)有更大的開銷用于裁剪,一般情況下都是正交視角節(jié)省開銷。
注意事項(xiàng):不要試圖用主攝像機(jī)去渲染在參與UI排序的3D物體,若使用主攝像機(jī)渲染,這個(gè)3D物體是絕對(duì)位于UI之下的,因?yàn)橹鲾z像機(jī)的深度緩沖區(qū)被UI攝像機(jī)清空了,UI攝像機(jī)開始渲染時(shí)所有UI像素都會(huì)正常通過深度測(cè)試,所以就肯定會(huì)渲染在3D物體之上。正常就應(yīng)該是交給UI攝像機(jī)渲染,UI攝像機(jī)渲染時(shí),正常3D物體會(huì)先被渲染,深度寫入后,UI物體再參與渲染時(shí)就會(huì)正常通過深度測(cè)試將被3D物體遮擋的像素過濾掉,呈現(xiàn)出3D物體在UI之上的。
World Space??
????????它同樣可以指定一個(gè)攝像機(jī)專門負(fù)責(zé)渲染畫布。但區(qū)別于Screen Space - Camera,畫布的位置、旋轉(zhuǎn)、縮放均不會(huì)隨著屏幕、攝像機(jī)變化而變化,它就變成和普通的3D平面物體一樣看待。