unity中的层级问题

注:在UI界面显示中,场景中需要一个清屏的摄像机,所以至少应该有两个摄像机。

1.当UI界面中有粒子特效时,给UI添加Canvas,不会影响粒子的层级。

2.UI中添加贴图特效时,UI中的Canvas的Order in Layer层级不能太高,太高会使使贴图的特效看不见,如果硬是要这样,那只能修改粒子的渲染队列数值。

影响层级的因素

1.Camera的Depth

depth小的先渲染

2.Sorting Layer 

在Tags & Layers设置中可见

3.Order in Layer

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

4.Render Queue

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到底怎么排序。

 

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  

MeshRenderer的SortingLayer与Canvas的SortingLayer相同

MeshRenderer的SortingOrder与Canvas的OrderInLayer相同

你可能感兴趣的:(笔记)