unity3d - 弹出式画布/面板不阻止 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”设置为一切和一切。我已经安装了对撞机,并且我已经为画布设置了不同的排序顺序以进行分层。我没主意了。为什么不屏蔽??
解决方案
画布 UI 对象按降序绘制(因此检查器中画布下方最低的对象最后绘制并且位于其他所有对象的前面)。
像这样:
- 帆布
- 文本1
- Text2(在 Text1 之后绘制)
- OverlayImage(在Text1和Text2之后绘制,阻挡光线投射)
如果您将图像 UI 对象添加到画布,请将其拖到检查器中该画布下方的最低对象,如上例所示,然后将其展开以占据整个画布,并设置锚点(控制调整大小) 根据窗口的宽度和高度进行扩展,该图像应始终覆盖整个画布。只要它保持为检查器层次结构中最低的游戏对象,它就应该阻止该画布上的事件。
我不确定场景中其他画布上的一个画布是否会阻塞事件,但我会在所有画布上添加 OverlayImages,并在您的示例中控制是否从画布 P 启用或禁用 OverlayImages。
推荐阅读
- python - 为什么即使输入是整数,我也会不断收到 TypeError?
- javascript - 如何在网站呈现之前检查 React/Gatsby 中的 window.innerWidth?
- tree - 使用队列的二叉树级别顺序遍历(数组实现)
- python - Box2D 关节伸出不合适的位置 - 允许物体通过。我怎样才能让它们更“紧”
- ios - swifty json 解析数组对象
- javascript - Redux 管理对象数组和查找嵌套对象
- bash - 无法在 cgi 脚本中运行 find 和 xargs
- python - 数组中字符串之间的常用字符
- android - 有没有一种简单的方法可以从 Kotlin 的字符串资源文件中获取具有默认值的数据类对象?
- sql - 当我们在语句中使用联接时,在选择语句中使用案例表达式时出错