【问题标题】:Unity not ignoring button click in "Ignore Raycast" layerUnity不忽略“忽略Raycast”层中的按钮单击
【发布时间】:2019-03-10 06:36:58
【问题描述】:

我创建了一个新场景来测试 Unity 2018.2.6f1 中的 'Ignore Raycast' 图层功能。该场景只是一个带有日志脚本的 UI 按钮。当我将按钮层更改为 'Ignore Raycast' 时,按钮仍然有效。在我们手动关闭 Image 和 Button 组件中的“Raycast Target”和“Interactable”复选框之前,所有按钮的行为是否都如此?

我想知道 'Ignore Raycast'、'Raycast Target' 和 'Interactable' 3 个选项之间的依赖关系。

【问题讨论】:

    标签: unity3d button raycasting


    【解决方案1】:

    Interactable 很简单。如果 Graphic Raycaster 在按钮上发现事件(鼠标悬停、单击、鼠标关闭等),它会对这些事件做出反应吗?如果Interactable 为真,那么它会。

    另外两个需要解释一下。

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

    Ignore Raycast 层与任何其他层一样,但通常会被物理射线投射忽略。 由创建物理射线投射的代码决定是否实际忽略Ignore Raycast 层中对象上的碰撞器。 例如,如果您创建一个带有Physics.IgnoreRaycastLayer 掩码的物理射线投射,那么它只会与Ignore Raycast层中的对象碰撞。

    但是,该设置再次处理物理射线投射

    Raycast Target 处理 Unity Graphic Raycaster,这是 Unity 处理与 UI 元素交互的方式(默认情况下)。 Graphic Raycaster 完全独立于 Physics raycast,以及它如何使用图层进行遮罩。除了图层,Graphic Raycaster 允许通过两种方式控制碰撞。

    其中第一种方式称为UI.GraphicRaycaster.BlockingObjects,它使光线投射在击中 2d 对象或 3d 对象时停止,或者两者都没有。

    第二种方式是Ignore Raycast发挥作用的地方。

    ui 元素的Raycast Target 确定与该元素碰撞的光线投射是否在该元素处停止,因此它下面的东西也不会与之交互。如果Raycast Target 已启用,那么当您将鼠标悬停或单击按钮或其他任何内容时,它会响应,但它已配置为这样做,按钮下方的任何内容不会 em> 有那个交互事件。

    例如,假设您要创建一个弹出窗口,该弹出窗口可以通过一种方式进行交互,使他们不会意外点击弹出窗口下方的按钮。在这种情况下,您可能希望在弹出窗口及其按钮等上启用Raycast Target

    TL;DR:

    • Interactable 确定按钮是自行启用还是禁用。
    • Raycast Target 确定按钮是否阻止被它覆盖的按钮执行操作。
    • Ignore Raycast 确定 Physics 光线投射是否默认忽略附加到它的碰撞器。

    【讨论】:

    • 感谢您的详细回答,它帮助了很多!那么,不用担心Ignore raycast layer,我可以使用canvas group 来关闭UI 元素的光线投射吗?它对性能有积极影响吗?
    • 有一些关于她create.unity3d.com/Unity-UI-optimization-tips的光线投射的建议。 canvas group 不应该对性能有太大的改变。更好的办法是将画布分成更小的部分,并尽可能多地关闭raycast target
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多