这篇文章主要总结一下Unity中UI的渲染排序。这里不涉及Particle在UI中的排序,关于Particle在UI中的排序问题在另外一篇文章中有单独介绍,链接在文章最后,感兴趣的小伙伴可以去看看。话不多说直接开始。
影响UI渲染排序的因素有以下这些:
- UI对象在Hierarchy窗口中的顺序
- Canvas中的Sort Order参数
- Canvas中的Sorting Layer参数
- Screen Space - Camera渲染模式下Camera中的Depth参数
- Screen Space - Overlay渲染模式
上面列出的是影响UI渲染排序的因素,对UI渲染排序影响的优先级也是按从小到大排列的。下面就来逐一介绍一下。
UI对象在Hierarchy窗口中的顺序
当创建UI对象时,UI对象会被自动添加到Canvas下。在同一个Canvas下的UI对象会根据在Hierarchy窗口中从上到下的顺序进行渲染。放个配图这样能更直观的看到。
Canvas中的Sort Order参数
在上面例子的基础之上我们先为red、green两个Image对象添加Canvas组件,在Canvas中我们重新设置Sort Order值。我们将red设为1、green设为0,由于red、green上的Canvas组件重写了Sort Order值,渲染顺序进行了重新的排序。
如下图:
不只是UI对象的渲染排序会受Sort Order影响,不同的Canvas也会受Sort Order影响。如下图:
Canvas在渲染排序时会根据Sort Order参数的数值,按从小到大的顺序进行渲染。
Canvas中的Sorting Layer参数
Sorting Layer是用于指定对象的排序层,默认参数为Default。在Project Settings中可以添加新的Sorting Layer层,并且可以通过拖动调整先后顺序。这里我们新添加两个Layer层UI1、UI2,如下图:
接下来我们通过设置Sorting Layer来进行排序。继续上一个示例的基础上,将red设置为UI1,green设置为UI2。如下图:
虽然按照Order in Layer参数red应该在green的上面,但由于Sorting Layer渲染排序的优先级高于Order in Layer,所以现在green是在red的上面。不同Canvas之间也是如此,如下图:
Sorting Layer参数会根据自定义的Layer层,以从上到下的顺序进行渲染。
Screen Space - Camera渲染模式下Camera中的Depth参数
上面的例子都是在同一个Camera下渲染的,当有多个Camera同时渲染时,Camera中的Depth参数会对渲染排序产生影响。现在我们添加两个新的Camera,并将两个Canvas由两个不同的Camera进行渲染。如下图:
当多个Camera进行渲染排序时,根据Camera中Depth参数从小到大的顺序进行渲染。
Screen Space - Overlay渲染模式
最后来介绍一下Render Mode中的Screen Space - Overlay渲染模式,Overlay会将UI渲染到最顶层,覆盖其他所有渲染的内容。如下图:
关于影响UI渲染排序的因素就先介绍到这里,更多相关信息可以查阅官方文档。
https://docs.unity3d.com/2019.1/Documentation/Manual/class-Canvas.html
关于Particle和UI的排序可以查看另一篇文章。
https://blog.csdn.net/huoyixian/article/details/88075368