UGUI学习(二)渲染模式和层级顺序

时间:2021-07-26 20:27:54

1,当有多个canvas并且渲染模式都为Overlay。

        这种情况下,渲染顺序是由canvas组件下的Sort Order决定的,值越大的越后渲染。

2,当有多个canvas并且渲染模式都为Camera。

        这种情况下,渲染顺序首先由Rendener Camera的Depth值决定,值越大越后渲染。

        如果Depth值相同,那么由canvas组件下的Sortint Layer顺序决定,顺序越后则越后渲染。

        如果Depth值和Layer值都相同的情况下,渲染顺序由Order in Layer决定,值越大越后渲染。 (注意:若Rendener Camera都是同一个摄像机,则不考虑Depth情况)

3,当有多个canvas并且渲染模式都为World。

         这种情况下,渲染顺序由canvas组件下的Sortint Layer顺序决定,顺序越后则越后渲染。

         如果Layer值都相同的情况下,渲染顺序由Order in Layer决定,值越大越后渲染。

         特别注意,当Layer和Order值都相同的情况下,此时渲染顺序由canvas距离Render Camera的距离决定,距离越近越后渲染。( 只有World模式有这种情况,因其他模式下canvas都是位置固定不可移动的。并且以上情况只考虑canvas都出现在Render Camera摄像范围的情况下。)

4,当有多个canvas并且渲染模式都存在的情况下。

         这种情况下,首先Overlay模式的canvas永远是最后渲染,并且同为Overlay模式的canvas在Sort Order的值越大时越后渲染。

       其次,Camera和Overlay同时存在的情况下有两种情况:若使用的不同的相机,则由摄像机的Depth决定,值越大越后渲染。若使用的是相同的相机,则是由canvas距离摄像机的距离决定的,距离越近的越后渲染。

-------------------------------------

1.Unity3D中的渲染顺序如下:
  不同的Camera的Depth
  相同Camera下的不同SortingLayer
  相同SortingLayer下的不同Z轴/Order in Layer

2.改变控件之间的层级关系
 (1)同一canvas下:
     改变控件transform的SiblingIndex,
     transform.GetSiblingIndex();
     transform.SetSiblingIndex(int index);
//index值越大,越后渲染,层级越大,越显示在前面

 (2)不同Canvas下:
    设置Canvas下的Sort Order //Sort Order值越大,越后渲染,层级越大,越显示在前面

渲染顺序与hierarchy面板里物体的摆放顺序也有关 ,面板里越靠上的物体越先被渲染,越后被渲染的显示在越前面