【问题标题】:OnGUI and Key PressOnGUI 和按键
【发布时间】:2015-05-19 15:09:50
【问题描述】:

当我创建一个空的游戏对象,将包含以下代码的脚本附加到它,然后按播放时,我可以看到 UI 结果:

public class OnGUI_test : MonoBehaviour
{
    void OnGUI ()
    {
            GUILayout.BeginArea(new Rect(10, 10, 100, 100));
            GUILayout.Button("Click me!");
            GUILayout.EndArea();
    }
}

但是为什么当我尝试添加代码以检查按键时,以下内容没有运行?

public class OnGUI_test : MonoBehaviour
{
    void OnGUI ()
    {
        if ( Input.GetKeyDown( KeyCode.Escape ) )
        {
            GUILayout.BeginArea(new Rect(10, 10, 100, 100));
            GUILayout.Button("Click me");
            GUILayout.EndArea();
        }
    }
}

我做错了什么以及如何纠正它以在按下 Esc 时看到按钮?

谢谢

【问题讨论】:

  • 阅读文档:docs.unity3d.com/ScriptReference/Input.GetKeyDown.html Input.GetKeyDown 需要从 Update 函数中调用,并在每个新帧上重置。
  • 它不需要“需要”从 Update 调用,以便像 GUI 事件一样“需要”从 OnGUI 调用,这是了解 KeyDown 事件后是否保持键的唯一方法在 OnGUI 中,要么在 KeyDown 和 KeyUp 事件期间缓存值,要么在每次 OnGUI 调用时使用 Input.GetKey。

标签: c# user-interface unity3d


【解决方案1】:

为了仅在按下转义按钮时绘制 Gui 元素,请检查 Input.GetKey(KeyCode.Escape) 然后它不会在每一帧上重置,并且在按下转义时将始终返回 true

【讨论】:

    【解决方案2】:

    只需从GetKeyDown 中删除Down

    如果您想在 Escape 按下之间保持不变,请在每个 GetKeyDown 上切换一个标志(类似于 isPanelVisible),然后在标志为 true 时绘制 UI。

    【讨论】:

    • 谢谢杰里。使用isPanelVisible的有用建议
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多