Unity - 如何在屏幕覆盖画布上方显示世界空间画布?

Use*_*ude 3 c# unity-game-engine

好的,基本上我有一个世界空间画布(当前使用不同的相机)和一个屏幕空间画布。在屏幕空间画布中,我有来自平面上资产存储的模糊材质,该材质仅适用于屏幕空间。

我需要做一个切换,我仍然有模糊的背景和返回的按钮,但在顶部我有我的世界空间画布(下面的“文本”对象):

在此输入图像描述

在第二个相机上将清除标志设置为 none 可以让我看到第一个相机看到的内容,但看不到它的画布。这里最好的选择是屏幕捕获第一个相机的画布吗?

或者有没有办法不让屏幕空间画布遮挡世界空间?

der*_*ugo 5

所以,如果我理解正确的话,你有 2 个摄像头,可以这么说:

  • MainCamera:用于显示 3D 内容
  • ScreenSpaceCamera:仅显示该屏幕空间“平面”。

您想要的是:始终在 ScreenSpace 内容之上显示 3D 内容,对吗?


所以你可以做的是创建一个特殊的图层ScreenSpace,例如

  • MainCamera-> Camera:
  • Depth= 0(较高的值意味着绘制在顶部)
  • ClearFlags=DepthOnly
  • CullingMask=除了 ScreenSpace

在此输入图像描述

  • ScreenSpaceCamera-> Camera:
  • Depth= -1(因此它绘制在深度级别 0 后面)
  • ClearFlags=什么都没有(或者你想要的任何东西)
  • CullingMask= ScreenSpace

在此输入图像描述


正如您现在所看到的,3D 内容(红色图像)始终绘制在屏幕空间(白色)之上。

在此输入图像描述


注意:如果您希望能够打开Screenspace和关闭它,您需要一个额外的相机来真正清除图像!正如你在Camera Preview相机的缓冲区没有“清除”(因为我们是这么告诉的)。

因此,如果您要禁用Screenspace您将获得在预览框中看到的内容!-> 不好^^

我只需添加第三个相机,例如BackgroundCamera作为MainCamera(因此它会自动正确移动)的子级并给它

  • Depth= -2(所以在屏幕空间后面)
  • ClearFlags= 例如SkyBox
  • CullingMask=什么都没有(所以你实际上只在这里渲染背景)

如果您有更复杂的想法,例如

  • 顶层 UI(深度 0)
  • 屏幕空间(深度-1)
  • 其他 3D 内容
    让这些内容由ScreenSpaceCamera。因此,如果您禁用模糊画布,它们会正常显示,否则会模糊。
  • 背景(深度-2)

只需使用 4 个摄像机、深度和不同层扩展该示例即可。