我创建了一个新场景来测试统一2018.2.6f1中的'忽略Raycast'图层功能。该场景只是一个带有日志脚本的UI按钮。当我将按钮层更改为“忽略射线广播” 时,该按钮仍然有效。在我们手动关闭“图像和按钮”组件中的“射线广播目标”和“可交互”复选框之前,所有按钮的行为都如此吗?
我想知道3个选项“忽略Raycast”,“ Raycast目标”和“可交互”之间的依赖关系。
答案 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 射线广播是否忽略附加到其上的对撞机。