oynix

于无声处听惊雷,于无色处见繁花

Unity Canvas的3种Render Mode

首先明确的是,只要一个UI元素要展示出来,就一定需要一个Canvas组件,或者直接挂载,或者间接挂载,即挂在某个父节点上。那么这篇来说一说Canvas的3种Render Mode。

Canvas的渲染模式主要影响的就是显示的层级。每个模式下如何才能设置Canvas的层级更高一些,使得其优先于其他Canvas显示,视觉上的效果就是层级高的Canvas盖住了层级低的Canvas,这就是使用不同模式时需要考虑的问题。

换句话说就是,如果全局只存在一个Canvas,那么基本不需要面对这个问题,直接根据节点的顺序即可知道显示的层级。但实际的需求中,会有各种层级交错问题,甚至还需要动态调整层级以满足独特的显示需求。

1. Screen Space - Camera

先说这个选项最多的模式。这个模式需要指定一个摄像机,一般使用场景Scene里默认的相机即可,除此之外,还有几个关键参数:

  • Plane Distance
  • Sorting Layer
  • Order in Layer

我们的摄像机和Canvas是存在于一个3D立体的世界场景中,而Plane Distance指的就是Canvas这个二维平面距离摄像机的距离,挂载Canvas的GameObject的Z坐标就会受到这个值的控制,值越小则距离摄像机越近,而Z坐标的值要具体看摄像机的Z坐标和Plane Distance,关系如下:

1
摄像机Z坐标 + Plane Distance = Canvas Z坐标

如果在Canvas和摄像机中间存在3D物体,那么3D物体也会显示在摄像机中。

而Sorting Layer则是把所有的Canvas分成几个固定的层,默认情况只有一个叫做Default的层,可以手动按需添加,下面的层的层级更高,也就是说下面层的Canvas的元素会显示在上面的层的Canvas上面。

在同一个层内,就要通过Order in Layer来控制渲染顺序,值大的会盖住值小的Canvas。

所以,要想让一个Canvas1优先于Canvas2渲染显示,那么就需要让1的Sorting Layer大于2;如果二者的相等,那么就要让1的Order in Layer的值大于2;如果二者还是相等,还可以调整Plane Distance。

2. Screen Space - Overlay

如果明白了上面的Camera模式,这个就很好理解了。Overlay可以理解成一个删减版的Camera,这个Overlay的意思是覆盖,盖住的是世界场景中的其他3D物体,也就是说,即便Canvas和摄像机之间有没有3D物体,也不会遮挡Canvas。

这个模式的Canvas始终贴着屏幕显示,其他的都会被覆盖,这也正是凸显了Overlay这个词。

这个模式也去掉了Sorting Layer,只剩下一个Sort Order,也就是意味着不需要分层,所有的Overlay都在同一层,然后按照Sort Order排序、渲染。

3. World Space

这个模式下,Canvas与其他3D物体没有区别。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2023/06/ceef9634c68d/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道