UGUI-元素的渲染順序以及改變控件之間的層級關係

元素的渲染順序

1.Camera是渲染順序的最大總指揮

順序由Camera的Depth值決定,值越小視野範圍越先渲染canvas

2.layer是對遊戲中全部物體的分類別劃分

    如Default、TransparentFX等。能夠將不一樣類別的物體劃分到不一樣的層,便於相機揀選,在相機的Culling Mask中能夠選擇渲染哪些層,不選擇的層則不會渲染,還能夠用於射線檢測對象的揀選,能夠指定只對某些層的對象進行射線檢測。markdown

3.canvas上的層級關係

    canvas默認的Render Mode是Screen Space-Overlay模式,此時僅具備sort order屬性,當把它設置爲Screen Space-Camera或者World Space時,sort order屬性消失了,變成了另外兩個屬性:sorting layer,order in layer。spa

    當把畫布設置爲Screen Space-Camera或者World Space後,畫布及畫布上的UI對象在世界空間默認也是靠Z值來決定渲染順序的,離相機遠的先渲染。當設置了sorting layer後,渲染的次序就由sorting layer來肯定了。sorting layer是自定義的標識符,哪一個sortinglayer在前(在layer & tags中設置的前後順序)哪一個先渲染。code

    order in layer是個數值,是在同一個sorting layer內的細分,sorting layer相同時order in layer的數值越小越先渲染。orm

    屏幕空間的東西都處於UI層不須要sorting layer,只提供sort order(其實也就是order in layer)。 默認狀況下sort oder都是0,此時UI物件按照在hierachy中出現的順序決定渲染順序。若是sort order不一樣時,值越小越先渲染。對象

四、2DObject--sprite問題

    特別注意sprite默認是個3D空間的物體,就算把它放到一個屏幕空間的canvas上,它仍然是3D空間的物體,只遵循3D空間的規則:老是會被UI擋住。排序

總結:

  • 不一樣的Camera的Depth
  • 相同Camera下的不一樣SortingLayer
  • 相同SortingLayer下的不一樣Z軸/Order in Layer

改變控件之間的層級關係

  • 同一canvas下: 

能夠在hierarchy中拖動元素進行從新排序來更改元素的渲染順序,還能夠在變換組件上使用SetAsFisrtSibling、SetAsLastSibling和SetSiblingIndex方法從腳原本控制渲染順序。遊戲

 改變控件transform的SiblingIndex:it

transform.GetSiblingIndex();  
transform.SetSiblingIndex(int index); //index值越大,越後渲染,層級越大,越顯示在前面
複製代碼
  • 不一樣Canvas下:

 設置Canvas下的Sort Order       //Sort Order值越大,越後渲染,層級越大,越顯示在前面io

相關文章
相關標籤/搜索