首页 > 解决方案 > 弹出式画布/面板不阻止 Raycast 到下面的按钮/UI

问题描述

我正在尝试创建一个弹出窗口,它将覆盖在当前画布的顶部并阻止与它的所有交互。我读到的所有内容都说要使用 Canvas Group(s) 和/或 Graphic Raycaster,但我找不到使这项工作发挥作用的神奇组合。

Canvas O 是典型按钮的屏幕空间覆盖。Canvas K 是我当前的 UI 内容的世界空间画布,我可以平移等等。Canvas P 是我的弹出窗口,它也是一个叠加层,我想阻止它与“后面”的 O 和 K 的所有交互。我在所有 3 个上都放了一个 Canvas 组,我在 P 上放了一个 Graphic Raycaster,我在 P 的 Canvas Group 中选择了“Blocks Raycasts”,并将“Blocking Objects”和“Blocking Mask”设置为一切和一切。我已经安装了对撞机,并且我已经为画布设置了不同的排序顺序以进行分层。我没主意了。为什么不屏蔽??

标签: unity3duser-interfaceraycasting

解决方案


画布 UI 对象按降序绘制(因此检查器中画布下方最低的对象最后绘制并且位于其他所有对象的前面)。

像这样:

  • 帆布
    • 文本1
    • Text2(在 Text1 之后绘制)
    • OverlayImage(在Text1和Text2之后绘制,阻挡光线投射)

如果您将图像 UI 对象添加到画布,请将其拖到检查器中该画布下方的最低对象,如上例所示,然后将其展开以占据整个画布,并设置锚点(控制调整大小) 根据窗口的宽度和高度进行扩展,该图像应始终覆盖整个画布。只要它保持为检查器层次结构中最低的游戏对象,它就应该阻止该画布上的事件。

我不确定场景中其他画布上的一个画布是否会阻塞事件,但我会在所有画布上添加 OverlayImages,并在您的示例中控制是否从画布 P 启用或禁用 OverlayImages。


推荐阅读