C# 统一-如何在屏幕覆盖画布上显示世界空间画布?

C# 统一-如何在屏幕覆盖画布上显示世界空间画布?,c#,unity3d,C#,Unity3d,好的,基本上我有一个世界空间画布(目前使用不同的相机)和一个屏幕空间画布。在屏幕空间画布中,我有一个来自平面上资产存储的模糊材质,它只在屏幕空间中工作 我需要做一个切换,在那里我仍然有模糊的背景和返回的按钮,但在顶部我有我的世界空间画布(下面的“文本”对象): 在第二台相机上将清除标志设置为“无”,可以让我看到第一台相机看到的是什么,但看不到它的画布。这里的最佳选项是屏幕捕捉第一台相机的画布吗 或者有没有办法不让屏幕空间画布阻挡世界空间?因此,如果我理解正确,您有两个摄像头,比如: main

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

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

在第二台相机上将清除标志设置为“无”,可以让我看到第一台相机看到的是什么,但看不到它的画布。这里的最佳选项是屏幕捕捉第一台相机的画布吗


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

因此,如果我理解正确,您有两个摄像头,比如:

  • main摄像机
    :用于显示3D内容
  • ScreenSpaceCamera
    :仅用于显示该屏幕空间的“平面”
你想要的是:总是在屏幕空间内容之上播放3D内容,对吗


因此,您可以做的是创建一个特殊的屏幕空间,例如
ScreenSpace

  • main摄像机
    ->
    摄像机

    • Depth
      =
      0
      (较高的值表示在顶部绘制)
    • clearfags
      =
      DepthOnly
    • CullingMask
      =除
      ScreenSpace

  • screenspace摄像机
    ->
    摄像机

    • 深度
      =-1(因此它在深度级别0后面绘制)
    • ClearFlags
      =无(或任何您想要的)
    • CullingMask
      =仅限
      屏幕空间


正如您现在看到的,3D内容(重映图像)总是绘制在屏幕空间(白色)的顶部


注意:如果您希望能够打开和关闭
屏幕空间
,您需要一个额外的摄像头来实际清除图像!正如您在
相机预览中看到的那样
相机的缓冲区没有被“清除”(因为我们告诉过它)

因此,如果您禁用
屏幕空间
,您将获得预览框中显示的内容!->不好^^

我只需添加第三个摄像头,例如
背景摄像头
,作为
主摄像头
的子摄像头(因此它会自动正确移动),并将其设置为

  • 深度
    =-2(因此在屏幕空间后面)
  • ClearFlags
    =例如
    SkyBox
  • CullingMask
    =无(因此您实际上只在此处渲染背景)

如果你有更复杂的想法,比如

  • ontop用户界面(深度0)
  • 屏幕空间(深度-1)
  • 其他3D内容
    让它们由
    屏幕空间摄影机
    进行渲染。因此,如果激活模糊画布,它们将正常显示,否则会模糊
  • 背景(深度-2)

只需使用4个摄影机、深度和不同的层来扩展示例。

您可以在其上添加画布组并暂时禁用它。这里的部分问题是您希望世界空间画布和其他世界空间对象的行为方式。例如,如果你有一块岩石,然后是一块画布,然后是另一块岩石,部分在彼此后面,那么你希望两块岩石都模糊,而不是画布吗?如果是这样的话,你就有问题了,因为那些世界空间画布是在与岩石相同的过程中渲染的;所以你需要一些后期处理的着色器来避免画布模糊。。。当他们看得见的时候,谢谢。现在唯一的问题是我的3d ui元素背后的3d世界仍然是交互式的。有没有办法禁用1号摄像机所看到的东西的交互?嗯,这很大程度上取决于你如何准确地与东西交互。。。。如果你禁用相机上的
Raycaster
组件,你就不能再与它交互了,但我不确定