统一的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");
        }
    }
}

统一的GUI.if语句后没有显示框

你的库存框没有显示,因为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.RepeatButtonGUI.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");
    }
}