You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#如何实现Toggle切换功能 修复Label状态无法稳定保持的问题

问题原因分析

代码2状态回弹问题

Unity的OnGUI方法每帧会被多次调用,你将isActive定义为OnGUI内的局部变量,每次方法执行时都会被重置为false。只有Insert键按下的那一次调用中isActive会被临时改为true,后续执行立刻恢复默认值,因此会出现变化后瞬间回弹的效果。

代码1无响应问题

你已经将isActive定义为类成员变量可以持久存储状态,但Input.GetKeyDown在OnGUI中调用稳定性差:Input.GetKeyDown仅在物理帧更新的第一帧返回true,而OnGUI每帧会触发多次,很容易错过按键事件,导致状态切换没有触发。

正确实现方案

推荐将按键检测逻辑放到Update方法中(Unity每帧仅调用一次Update,输入检测准确率更高),用类成员变量存储状态,OnGUI仅负责UI绘制,示例代码如下:

// 类成员变量,持久存储开关状态
private bool isActive = false;

private void Update()
{
    // Update中检测按键不会丢失事件
    if (Input.GetKeyDown(KeyCode.Insert))
    {
        isActive = !isActive;
    }
}

private void OnGUI()
{
    // 仅根据当前状态绘制Label
    GUI.Label(new Rect(0, 0, 500, 500), isActive ? "on" : "off");
}

如果你需要在OnGUI中直接处理输入,也可以通过GUI原生事件检测实现:

private bool isActive = false;

private void OnGUI()
{
    // 检测GUI按键按下事件
    if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Insert)
    {
        isActive = !isActive;
        Event.current.Use(); // 标记事件已处理,避免重复触发
    }
    GUI.Label(new Rect(0, 0, 500, 500), isActive ? "on" : "off");
}

内容的提问来源于stack exchange,提问作者csgoteeqo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:57:05