在Unity的UGUI系统里使用Renderer的显示层级研究 (三) Canvas与Renderer混合显示的测试

如果直接看最后的总结,可以点击这里:
在Unity的UGUI系统里使用Renderer的显示层级研究 (零) 规律总结

在第二节测试了Canvas之间的渲染层级关系,详细可以点击查看,但是在与三维物体混合显示的时候有哪些特点?
这一节就来测试一下。

第一篇的测试中第4条我推出了一个结论,也就是3维空间的物体不会受canvas的影响,这个结论可以从两个方面来理解:

  1. 它的渲染还是会按以前的显示,不受影响;
  2. 它的渲染不会出现在UI层,也就是说canvas的渲染效果中不会出现三维物体。

一个是三维组件的渲染还是会按以前的显示,不受影响;另一个是Canvas的渲染结果里不会出现三维组件。

根据这一个推论,三维物体放在Canvas下和放在Canvas外没有区别,如果这两种类型的sortingOrder是同时生效的,那么无论放在哪里都能生效。

我们

一、 Canvas与MeshRenderer

根据Canvas的三种模式,这一节要测试的也分为三类:
1. ScreenSpace-Overlay与MeshRenderer的混合显示
2. WorldSpace与MeshRenderer的混合显示
3. ScreenSpace-Camera与MeshRenderer的混合显示

1. ScreenSpace-Overlay与MeshRenderer的混合显示

这是最常见的模式,不需要过多解释,MeshRenderer永远只会被ScreenSpace-Overlay覆盖。

2. WorldSpace与MeshRenderer的混合显示

在第一篇文章中我测试过三维物体的渲染,发现只与Z轴位置有关,也就是说OrderInLayer在这里无论如何调整都不会出现完全覆盖三维物体的情况,这里一样可以进行测试,明显可以看到的是,cube从canvas中穿了过去,在cube之后的那部分被遮挡了。

在这里插入图片描述
在这里插入图片描述

3. ScreenSpace-Camera与MeshRenderer的混合显示

我们知道ScreenSpace-Camera的显示实际上是跟WorldSpace一样把UI放到了三维空间中显示,只不过去除了透视效果,所以可以预期的是,cube还会跟WorldSpace一样会与canvas发生穿透的情况——
在这里插入图片描述

相对于前面canvas之间渲染的情况而言,与三维空间中的物体的层级关系还是相对简单的。

二、 Canvas与SpriteRenderer的显示

同样的,我们需要对Canvas的三种模式一一进行测试。
特别提醒:因为SpriteRenderer和canvas一样,都没有厚度,所以SpriteRenderer和canvas之间不会出现MeshRenderer与canvas之间那样正好穿过的情况,相互交叉的部分要么整体被覆盖,要么整体显示在canvas之上

1. ScreenSpace-Overlay与SpriteRenderer的混合显示

与MeshRenderer一样,ScreenSpace-Overlay模式下肯定会覆盖到三维空间之上,不过考虑到SpriteRenderer的sortingOrder是有效的,这里对于sortingOrder进行一下测试。
这里Canvas的模式为ScreenSpace-Overlay,sortingOrder为0,而这个SpriteRenderer的sortingOrder为2,结果可以看出,仍然被canvas所覆盖,说明ScreenSpace-Overlay模式的优先级是最高的
在这里插入图片描述

2. WorldSpace与SpriteRenderer的混合显示
  1. position.z的影响
    控制canvas和SpriteRenderer的sortingOrder都为0,保持canvas的posiont.z为10,调整SpriteRenderer物体的position.z的数值,可以发现,position.z会影响到物体的显示层级。
    在这里插入图片描述
    当SpriteRenderer的position.z为20时,显示在canvas的后面;
    在这里插入图片描述
    如果把position.z修改为5,那么会有这样的显示:
    在这里插入图片描述

  2. sortingOrder的影响
    在上面的基础上,直接将canvas的sortingOrder修改为1,会发现显示到了SpriteRenderer之上:
    在这里插入图片描述

3. ScreenSpace-Camera与SpriteRenderer的混合显示
  1. position.z的影响
    控制canvas和SpriteRenderer的sortingOrder都为0,保持canvas的posiont.z为15.11,调整SpriteRenderer物体的position.z的数值,可以发现,position.z会影响到物体的显示层级。
    在这里插入图片描述

当SpriteRenderer的position.z为40时,显示在canvas的后面;

在这里插入图片描述
当SpriteRenderer的position.z为40时,显示在canvas的前面;

在这里插入图片描述

  1. sortingOrder的影响
    在上面的基础上,直接将canvas的sortingOrder修改为1,会发现显示到了SpriteRenderer之上:
    在这里插入图片描述

三、总结

很容易看出来的是,canvas的三种模式分成了两种类型,一种是overlay模式,无论三维空间中的物体如何显示,只要在这种模式下,它就能显示在所有三维空间物体的最上方;另一种是在三维空间中进行渲染,在这种情况下,position.z会成为直接影响渲染效果的一个主要参数,而SpriteRenderer又比MeshRenderer多了一个sortingOrder参数的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值