Unity不忽略“忽略Raycast”层中的按钮单击

时间:2018-10-04 19:39:35

标签: unity3d button raycasting

我创建了一个新场景来测试统一2018.2.6f1中的'忽略Raycast'图层功能。该场景只是一个带有日志脚本的UI按钮。当我将按钮层更改为“忽略射线广播” 时,该按钮仍然有效。在我们手动关闭“图像和按钮”组件中的“射线广播目标”和“可交互”复选框之前,所有按钮的行为都如此吗?

我想知道3个选项“忽略Raycast”,“ Raycast目标”和“可交互”之间的依赖关系。

Button inspector

1 个答案:

答案 0 :(得分:3)

Interactable很简单。如果Graphic Raycaster在按钮上找到一个事件(将鼠标悬停,单击,将鼠标移开等),它是否会对那些事件作出反应?如果Interactable为真,那么它将为真。

另外两个需要一些解释。

图层用于处理与Unity的 Physics 光线投射发生的碰撞。

Ignore Raycast层与其他任何层一样,但是通常会被Physics射线广播忽略。 由创建Physics射线广播的代码决定是否实际上忽略Ignore Raycast层中对象上的对撞器。例如,如果您创建的蒙版射线广播带有{{ 1}},那么它只会与Physics.IgnoreRaycastLayer层中的对象碰撞器发生碰撞。

不过,该设置还是针对物理射线广播

Ignore Raycast处理Unity 图形 Raycaster,这是Unity处理与UI元素交互的方式(默认情况下)。图形射线广播器完全独立于物理射线广播,以及它如何使用图层进行蒙版。 Graphic Raycaster允许使用两种方式控制碰撞,而不是分层。

第一种方法是称为Raycast Target的方法,它使光线投射在击中2d对象或3d对象(或两者都没有)时停止。

其中第二种方式是UI.GraphicRaycaster.BlockingObjects发挥作用的地方。

ui元素的Ignore Raycast确定与该元素碰撞的光线投射是否在该元素处停止,因此它下面的内容也不会与之交互。如果启用了Raycast Target,则当您将鼠标悬停或单击某个按钮或其他按钮时,它将响应,但配置为执行此操作,但是按钮下方的任何内容都不会发生互动事件。

例如,假设您要创建一个可以与之交互的弹出窗口,而不会意外点击该弹出窗口下方的按钮。在这种情况下,您可能希望在弹出窗口及其按钮上启用Raycast Target

TL; DR:

  • Raycast Target确定按钮是单独启用还是禁用。
  • Interactable确定按钮是否阻止其遮盖的按钮运行。
  • Raycast Target确定默认情况下 Physics 射线广播是否忽略附加到其上的对撞机。