1

我正在尝试使用 GUI.ModalWindow 来阻止用户与场景中的其他项目进行交互,但仍然可以使用 ModalWindow 之外的按钮。

public class ModalDialog : MonoBehaviour
{
    private Rect windowRect = new Rect(100, 130, 220, 100);

    void OnGUI()
    {
        windowRect = GUI.ModalWindow(0, windowRect, DoMyWindow, "My Window");
    }

    void DoMyWindow(int windowID)
    {
        if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World"))
        {
            print("Got a click");
        }
    }
}

使用附加到Canvas的上述类(取自Unity 文档),我可以单击屏幕上的两个按钮:

显示设置和错误的屏幕截图

有什么我错过的吗?

4

1 回答 1

1

为了回答我自己的问题,我联系了 Unity 支持并收到以下回复:

您手动创建的 UI 组件、按钮、文本等与您通过脚本创建的 GUI 不同,因为它们是 2 个独立的类。因此,您得到的行为是预期的,而不是错误。

对我来说,这使得 ModalWindow 的使用有些受限,因为您无法使用 Unity 编辑器创建 UI。

为了解决我的问题,我放弃了 ModalWindow,而是创建了一个Canvas作为我的根 GameObject。我添加了一个PanelGameObject 作为画布的子对象,并确保它出现在我所有其他 UI 元素的顶部。那么当面板显示出来时,它下面的 UI 元素就无法交互了。

Scene
  |- Canvas
      |- Modal Panel
      |- UI Button
于 2017-06-16T23:40:54.460 回答