统一的GUI.if语句后没有显示框
本文关键字:显示 语句 GUI if | 更新日期: 2023-09-27 18:09:05
谁能告诉我为什么我的库存箱不显示?如果用户按下库存按钮,我希望显示库存框。我没有得到任何错误,如果我把库存框放在if语句之外,它工作得很好。
using UnityEngine;
using System.Collections;
public class MyGUI : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI () {
// Make a background for the button
GUI.Box (new Rect (10, 10, 100, 200), "Menu");
// Make a button.
// Be able to click that button.
// If they click it return inventory screen.
if (GUI.Button (new Rect(20, 50, 75, 20), "Inventory")) {
Debug.Log("Your inventory opens");
GUI.Box (new Rect (150, 10, 300, 200), "Inventory");
}
}
}
你的库存框没有显示,因为OnGUI函数每帧都被调用,比如Update。这意味着你的库存矩形只会在OnGUI调用时被绘制,当库存按钮被点击时。
你可以使用一个布尔标志来解决这个问题。
private bool _isInvetoryOpen = false;
void OnGUI () {
GUI.Box (new Rect (10, 10, 100, 200), "Menu");
// Toggle _isInventoryOpen flag on Inventory button click.
if (GUI.Button (new Rect (20, 50, 75, 20), "Inventory")) {
_isInvetoryOpen = !_isInvetoryOpen;
}
// If _isInventoryOpen is true, draw the invetory rectangle.
if (_isInvetoryOpen) {
GUI.Box (new Rect (150, 10, 300, 200), "Inventory");
}
}
在点击库存按钮时切换该标志,并在以下OnGUI调用期间继续绘制或不绘制。
http://docs.unity3d.com/ScriptReference/GUI.Button.html http://docs.unity3d.com/Manual/gui-Basics.html@davidjheberle是正确的,因为这是由于对OnGUI
调用的重复性质;但值得一提的是,在现代Unity中,你也可以使用GUI.RepeatButton
。GUI.RepeatButton
几乎与GUI.Button
相同,保存鼠标按钮的状态为每一帧检查,而不仅仅是初始单击的帧。所以,至少对于Unity 2020.3和前后版本,下面的代码也可以工作:
void OnGUI () {
GUI.Box (new Rect (10, 10, 100, 200), "Menu");
//Note the difference here-- we are using a RepeatButton instead
if (GUI.RepeatButton (new Rect(20, 50, 75, 20), "Inventory")) {
Debug.Log("Your inventory opens");
GUI.Box (new Rect (150, 10, 300, 200), "Inventory");
}
}