unity渲染層級關系小結


最近連續遇到了幾個繪制圖像之間相互遮擋關系不正確的問題,網上查找的信息比較凌亂,所以這里就把自己解決問題中總結的經驗記錄下來。

 

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 

sorting layer

sorting order

 

 

 

如文章中有不正確的地方,歡迎指正。 ^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM