能够影响渲染顺序的因素有:
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