是否可以在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
的主要原因是很好地组织布局。
答案 0 :(得分:0)
要使代码生效,GUI.Window
必须替换为GUILayout.Window
。那就是:
rectMsgWindow = GUI.Window(0, rectMsgWindow, MessageWindow, "Hint", msgWindowStyle);
为:
rectMsgWindow = GUILayout.Window(0, rectMsgWindow, MessageWindow, "Hint");
背后的原因是:
GUILayout
和GUI
是Unity 3D中不同的用户界面系统。如果它们混合在一起并且加载它们将无法工作。令人惊讶的是,Unity不会发出此警告/编译错误。