如何修复关于 UI canvas 的激光渲染
How to fix the rendering of laser with respect to the UI canvas
在 world-space 渲染模式的 canvas 中添加了一些 UI 元素。 UI 元素相对于激光指示器的遮挡存在问题。这里的指针是由线渲染器制成的。以下是已经尝试过的方法,但指针仍未正确遮挡 canvas.
- 更改层次结构
- 更改 z 顺序
- 更改排序顺序
源代码来自 Unity,可用 here。没有需要修改的相关脚本。似乎只需要在此处更改设置或着色器。
可以编写自定义着色器来测试深度,但这将是一个非常昂贵的着色器 - 看起来您想在 VR 上使用它,我不建议这样使用它。
过度设计的解决方案,仍然不是很便宜,但更便宜的解决方案是将 UI 渲染到相机上,相机渲染到 RenderTarget
并将输入传递给 UI。
- 创建相机 - 使用 Redner Target 输出
- 创建 canvas 使用屏幕 Space - 相机
- 将相机连接到 Canvas
- 将 Plane 放入世界 space 并将 RenderTarget 用作 material
- 添加一个脚本,允许通过 RenderTarget 将 RayCasts 传递到 UI。
几点注意事项:
- 只要可以保存性能,就需要禁用相机,并且只有在更新 UI 时才通过
Camera.Render()
进行更新。
- 这个解决方案仍然很昂贵
- 给一个简单的问题增加了很多复杂性
- 增加了围绕网格“包裹”UI的可能性
编辑:编辑后问题简单多了!
UI 渲染在 RenderQueue = 3000
你可能有未点亮的 material 作为具有 RenderQueue = 2450
.
的线渲染器
您需要为您的线渲染器创建一个 material 和 RenderQueue >= 3000
如果您不想创建新的material,您可以从代码
更改它
// use this with caution! As this can affect other materials when run in editor!
meshRenderer.material.renderQueue = 3100;
编辑 2: 如果您安装了 URP,您可能需要将默认值 material 更改为 URP 中的某些内容。默认 material 使用 Legacy 着色器,这会导致线渲染器和 UI.
出现问题
在 world-space 渲染模式的 canvas 中添加了一些 UI 元素。 UI 元素相对于激光指示器的遮挡存在问题。这里的指针是由线渲染器制成的。以下是已经尝试过的方法,但指针仍未正确遮挡 canvas.
- 更改层次结构
- 更改 z 顺序
- 更改排序顺序
源代码来自 Unity,可用 here。没有需要修改的相关脚本。似乎只需要在此处更改设置或着色器。
可以编写自定义着色器来测试深度,但这将是一个非常昂贵的着色器 - 看起来您想在 VR 上使用它,我不建议这样使用它。
过度设计的解决方案,仍然不是很便宜,但更便宜的解决方案是将 UI 渲染到相机上,相机渲染到 RenderTarget
并将输入传递给 UI。
- 创建相机 - 使用 Redner Target 输出
- 创建 canvas 使用屏幕 Space - 相机
- 将相机连接到 Canvas
- 将 Plane 放入世界 space 并将 RenderTarget 用作 material
- 添加一个脚本,允许通过 RenderTarget 将 RayCasts 传递到 UI。
几点注意事项:
- 只要可以保存性能,就需要禁用相机,并且只有在更新 UI 时才通过
Camera.Render()
进行更新。 - 这个解决方案仍然很昂贵
- 给一个简单的问题增加了很多复杂性
- 增加了围绕网格“包裹”UI的可能性
编辑:编辑后问题简单多了!
UI 渲染在 RenderQueue = 3000
你可能有未点亮的 material 作为具有 RenderQueue = 2450
.
您需要为您的线渲染器创建一个 material 和 RenderQueue >= 3000
如果您不想创建新的material,您可以从代码
更改它// use this with caution! As this can affect other materials when run in editor!
meshRenderer.material.renderQueue = 3100;
编辑 2: 如果您安装了 URP,您可能需要将默认值 material 更改为 URP 中的某些内容。默认 material 使用 Legacy 着色器,这会导致线渲染器和 UI.
出现问题