Unity UI 层级 相关

能够影响渲染顺序的因素有:

1、Camera Depth

相机组件上设置的相机深度,深度越大越靠后渲染。

2、Sorting Layer

在Tags & Layers设置中可见

3、Order In Layer

相对于Sorting Layer的子排序,用这个值做比较时只有都在同一层时才有效。

4、RenderQueue

Shader中对Tags设置的“Queue”。

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

排序结果
1、Camera Depth

永远最高。Camera Depth小的一定先进渲染管线。除非UGUI的Screen Space - Overlay

2、当Sorting Layer和Order In Layer相同时

RenderQueue小的先进渲染管线。

3、当Sorting Layer和Order In Layer不相同时!

3.1 当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[0~2500]或[2501~5000]时,SortingLayer和OrderInLayer的排序生效。

3.2 当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[0~2500]和[2501~5000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer的排序。

2500为Unity作为Opacity和Transparent的分界线,因此如果两个材质的Queue分别在分界线的两边,也就是一个不透明一个透明,则Unity一定会先把不透明的物体送进渲染管线,无论Sorting Layer和Order In Layer到底怎么排序。


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

在NGUI下,有这么几层(按优先级从高到低排列):

1,摄像机的深度 Camera.Depth , 大盖小

2,SortOrder,这个属性可以在NGUIPanel和粒子的Render里调整,默认都是0

3,RenderQueue属性,这个在Inspector面板中只能在UIPanel中显示调整(从3000开始,设置以后“4”和“5”的Depth就会失效,即便这个属性值一致),并且每个Material也可以通过代码设置这个值

4,UIPanel的Depth

5,UIWidget的Depth

6,空间坐标,在以上属性一致的情况下,根据与摄像机的位置渲染

补充:以上关系都是在shader的ZWrite属性设置为OFF的前提下,如果是ON,就呵呵了

当开启了深度写入时,物体的空间位置(transform.position.z)会影响层级,z值小的在前面。

NGUI中生成的UIDrawCall里面的Mesh都是片,所以sorting order对它有用,而之前说的之间创建一个cube,它是一个3D物体,3D物体和UI没办法通过它来控制层级的。



UGUI:

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  

你可能感兴趣的:(Unity UI 层级 相关)