如何防止UI raycast通过另一个Canvas?

时间:2016-07-18 09:50:57

标签: c# canvas unity3d touch-event

我在场景中有两个画布,所有Canvas都设置为屏幕空间模式相机渲染模式。第一个Canvas是主Canvas,并且有一些按钮。'在图层中排序'属性是0。

第二个Canvas涵盖了第一个Canvas的整个区域。当您点击第一个Canvas上的某个按钮时,第二个Canvas会弹出第一个Canvas(图层中的顺序为1)。

问题在于,当我触摸第二个画布时,光线投射也会击中第一个Canvas。在屏幕上显示第二个Canvas(弹出窗口)时,如何防止光线投射到达第一个Canvas

1 个答案:

答案 0 :(得分:1)

如果第二个Canvas只是一个弹出窗口,而不是第一个,则不需要将其设为Canvas。改为Panel。选择您的第一个Canvas,右键点击,然后转到用户界面 - > 面板。您也可以从 GameObject 执行此操作 - &gt ;的 UI - >的面板即可。只需确保选择了第一个Canvas

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

只需将PopupPanel拖到下面脚本中的popupPanel插槽,然后您就可以使用showPopup()hidePopup()来控制弹出式面板。

public GameObject popupPanel;

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

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

编辑:

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