可以在GUI.Window中使用GUILayout吗?

时间:2014-12-18 10:33:39

标签: user-interface unity3d

是否可以在GUILayout内使用GUI.Window

// Message Box =====
private float msgWindowWidth = 400;
private float msgWindowHeight = 300;
protected Rect rectMsgWindow;
protected bool showMsgWindow = false;

void OnGUI() {
  if(showMsgWindow) {
    GUIStyle msgWindowStyle = new GUIStyle();
    msgWindowStyle.normal.textColor = new Color(1, 1, 1);
    rectMsgWindow = GUI.Window(0, rectMsgWindow, MessageWindow, "Hint", msgWindowStyle);
  }
}

protected void MessageWindow(int windowID) {
  GUILayout.BeginVertical();
  GUILayout.Label("Feature not available yet");
  GUILayout.Space(10);
  if(Button("OK")) {
    showMsgWindow = false;
  }
  GUILayout.EndVertical();
}

// a function that generates GUILayout button
protected bool Button(string label)
{
    return GUILayout.Button(
        label, 
        GUILayout.MinHeight(buttonHeight), 
        GUILayout.MaxWidth(mainWindowWidth)
    );
}

目前它只显示" Hint"在showMsgWindow设置为true后为白色。我错过了显示GUI窗口内容的内容?

P.S。使用GUILayout的主要原因是很好地组织布局。

1 个答案:

答案 0 :(得分:0)

要使代码生效,GUI.Window必须替换为GUILayout.Window。那就是:

rectMsgWindow = GUI.Window(0, rectMsgWindow, MessageWindow, "Hint", msgWindowStyle);

为:

rectMsgWindow = GUILayout.Window(0, rectMsgWindow, MessageWindow, "Hint");

背后的原因是:

GUILayoutGUI是Unity 3D中不同的用户界面系统。如果它们混合在一起并且加载它们将无法工作。令人惊讶的是,Unity不会发出此警告/编译错误。