如何防止 UI 光线投射通过另一个 Canvas?

How can I prevent UI raycast from going through another Canvas?

我在一个场景中有两个 canvas,所有 Canvas 都设置为屏幕 Space 模式相机渲染模式。第一个Canvas是主要的Canvas还有一些buttons.The'order in layer'属性是0.

第二个Canvas覆盖了第一个Canvas的整个区域。当您单击第一个 Canvas 上的某个按钮时,第二个 Canvas 将在第一个 Canvas 上弹出(层中的顺序为 1)。

问题是,当我触摸第二个 canvas 时,光线投射也击中了第一个 Canvas。当屏幕上显示第二个 Canvas(弹出窗口)时,如何防止光线投射击中第一个 Canvas

如果第二个 Canvas 只是第一个 UI 之上的弹出窗口,则无需将其设为 Canvas。改为 Panel 。 Select 你的第一个 Canvas,右击然后转到 UI->面板。你也可以从 GameObject->UI->Panel 执行此操作。只需确保选择第一个 Canvas

将在第一个 Canvas 内创建一个新的 UI 面板。您可以将其重命名为弹出面板,然后将弹出面板 UI 的所有 UI 组件(例如 ButtonsTexts 放在弹出面板下。使用 popupPanel.SetActive(true); 显示弹出窗口 Window,使用 popupPanel.SetActive(false); 隐藏它。

只需将PopupPanel拖到下面脚本中的popupPanel槽中,即可使用showPopup()hidePopup()控制弹出面板。

public GameObject popupPanel;

void showPopup()
{
    popupPanel.SetActive(true);
}

void hidePopup()
{
    popupPanel.SetActive(false);
}

编辑:

确保您的弹出窗口 Panel 位于层次结构 canvas 的末尾,以使其呈现在其他所有内容之上。这就是背后阻止与他人互动的主要思想。