Unity渲染層級關係

第一:UGUI中:

一、條件:Render Mode都是Screen Space-Camera時的渲染順序

1.遵循刷油漆規則

2.依次由Render Camera的Depth值、Sorting  Layer先後順序、Order in Layer值決定

Render Camera不同時,由Render Camera的Depth決定

Render Camera相同時,由Sorting Layer先後順序決定

Render Camera相同時,Sorting Layer相同,由Order in Layer值決定。


二、1.OverLay模式,永遠覆蓋在其他物體之上。出現在最上面。不受攝像機的Depth值影響。

2.有多個攝像機時,由攝像機的Depth值決定

3.只有一個攝像機時,由距離和方向決定World模式和Camera模式、它們的渲染結果 可前、可後、可穿插。


三、條件:同一個Canvas下,UI對象在Hierarchy窗口中越往上越先渲染,越往下越後渲染。

第二:所有的渲染:

Unity中的渲染順序自上而下大致分爲三層。 最高層爲Camera層,可以在Camera的depth那裏設置,設置之後,圖形的渲染順序就是先繪製depth低的相機下的物體,再繪製depth高的相機下的物體,也就是說,depth高的相機會覆蓋depth低的相機(具體的覆蓋關係有don't clear, solid color等等幾種)

比Camera層稍低一層的是sorting layer層, 隨便找一個可以設置sorting layer的地方,選擇sorting layer,點添加按鈕,就可以看到當前所有的sorting layer,並且可以更改sorting layer的順序,排位靠後的sorting layer會覆蓋排位靠前的sorting layer。 設置好sorting layer的相互關係之後,就可以給任何一個繼承於Renderer類,或者有renderer的子類作爲field的對象設置sorting layer了。 注意這些sorting layer的遮擋關係是在同一個camera的層級下的。 不同camera下的renderer渲染順序以camera的depth爲準。 有的component的sorting layer可以直接在unity editor裏面設置,比如Sprite Renderer。 有的則需要用代碼來設置,比如設置Particle system的sorting layer, 就需要在代碼中取到 ParticleSystem.Renderer.SortingLayer 來進行設置。

比sorting layer再低一層的是sorting order, 這個數字指代的是在同一個sorting layer下的渲染順序,用法很明顯就不贅述了。

需要注意不要混淆的是gameobject的layer,和renderer的sorting layer。 gameObject的layer個人理解是一個邏輯上的分層,用於camera的culling mask等。 而renderer的sorting layer則用於渲染。只有繼承與renderer或者有renderer作爲filed的component才需要設置sorting layer

另外需要指出的是,常用的NGUI的widget depth其本質也是一個sorting layer下的sorting order。 NGUI好像用的是一個叫做“UI"的sorting layer。 由此大家如果有需要,也可以自己取Hack NGUI的代碼,把NGUI的sorting layer暴露出來供自己定製。

簡單總結一下,決定Unity渲染關係的層級順序是:

Camera         //在不同的Camera中,渲染順序由Depth決定,depth值越低,越先渲染,值越高,

越後渲染。


sorting layer    //在相同的Camera下,越在上層,越先渲染,越在下層,越後渲染。

sorting order    //在相同的 sorting layer下,值越小,越先渲染,值越大,越後渲染。


發佈了35 篇原創文章 · 獲贊 20 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章