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

3

好的,基本上我有一个世界空间画布(目前使用不同的相机)和一个屏幕空间画布。在屏幕空间画布中,我在平面上使用了来自资产商店的模糊材质,该材质仅在屏幕空间中运作。

我需要进行切换,以便我仍然拥有那个模糊的背景和返回按钮,但是在其上方我有我的世界空间画布(下面的“文本”对象):

enter image description here

将第二个相机的清除标志设置为无,可以使我看到第一个相机看到的内容,但不包括它的画布。在这里最好的选择是获取第一个相机的屏幕截图吗?

还是说有一种方法可以使屏幕空间画布不阻塞世界空间?


你可以在上面添加一个CanvasGroup并临时禁用它。 - aybe
这里的问题之一是你想让世界空间画布和其他世界空间对象如何行为。例如,如果你有一块石头,然后是一个画布,再然后是另一块石头,它们部分重叠在一起,那么你想要两个石头都模糊,但不想让画布模糊吗?如果是这样的话,你就有了一个问题,因为这些世界空间画布与石头在同一次渲染中被渲染;所以你需要一些特殊的后处理着色器来明确地不模糊画布……当它们可见时。 - Marconius
1个回答

5

如果我理解正确,您有两个相机:

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

而您想要的是:始终将3D内容显示在屏幕空间内容的顶部,对吗?


那么您可以创建一个特殊的图层,例如ScreenSpace,然后:

  • MainCamera -> Camera
  • Depth = 0(数值越高表示绘制在顶部)
  • ClearFlags = DepthOnly
  • CullingMask = 除了ScreenSpace之外的所有内容

enter image description here

  • ScreenSpaceCamera -> Camera
  • Depth = -1(这样它就会在深度级别0后面绘制)
  • ClearFlags = Nothing(或任何您喜欢的选项)
  • CullingMask = 仅ScreenSpace

enter image description here


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

enter image description here


注意:如果您想要能够切换Screenspace的开和关,您需要添加另一个相机来清除图像!如您所见,该相机的缓冲区没有“清除”(因为我们告诉它不要这样做)。

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

我建议只需添加第三个相机,例如BackgroundCamera,并将其作为MainCamera的子级(因此它会自动正确移动),然后将其设置为:

  • Depth = -2 (位于 ScreenSpace 后面)
  • ClearFlags = 例如 SkyBox
  • CullingMask = Nothing(这样就只在此处渲染背景)

如果你有更复杂的需求,例如:

  • 置顶 UI(深度为 0)
  • ScreenSpace(深度为 -1)
  • 其他 3D 内容,
    请通过 ScreenSpaceCamera 渲染。因此,如果你停用模糊画布,它们将正常显示,否则将被模糊。
  • 背景(深度为 -2)

那么可以使用 4 个摄像机、不同的深度和层来扩展示例。


谢谢。现在唯一的问题是我在3D UI元素后面的3D世界仍然是可交互的。有没有办法禁用相机1所看到的交互? - UserDude
嗯,这在很大程度上取决于你如何与东西进行交互...如果是UI方面的东西,我知道如果在相机上禁用“Raycaster”组件,则无法再与其交互,但我不确定。 - derHugo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接