首页 > 解决方案 > 如何在统一 c# 中切换?

问题描述

我正在尝试切换标签以使用切换按钮进行更改,但我无法弄清楚。使用代码 1,它根本不会更改为值,而使用代码 2,它会在一瞬间发生变化。我不知道如何让它切换并保持切换状态。谁能帮我解决这个问题

代码 1

 bool isActive = false;
        public void OnGUI() {


            

            if (Input.GetKeyDown("insert"))
            { 
                isActive = !isActive;
            }
            
            if (isActive == true)
            {
                GUI.Label(new Rect(0, 0, 500, 500), "on");
            }
            else
            {
                GUI.Label(new Rect(0, 0, 500, 500), "off");
            }

代码1的结果按下插入,它不会改变

代码 2

 public void OnGUI() {


            bool isActive = false;

            if (Input.GetKeyDown("insert"))
            { 
                isActive = !isActive;
            }
            
            if (isActive == true)
            {
                GUI.Label(new Rect(0, 0, 500, 500), "on");
            }
            else
            {
                GUI.Label(new Rect(0, 0, 500, 500), "off");
            } 

代码2的结果

标签: c#unity3d

解决方案


您应该调用GetKeyDownfromUpdate函数,因为状态会为每一帧重置。我建议使用KeyCodeas well 而不是字符串键名。

样本

public class ExampleClass : MonoBehaviour
{
    bool isActive = false;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Insert))
        {
            isActive = !isActive;
        }
    }
    void OnGUI()
    {
        if (isActive == true)
        {
            GUI.Label(new Rect(0, 0, 500, 500), "on");
        }
        else
        {
            GUI.Label(new Rect(0, 0, 500, 500), "off");
        }
    }
}

推荐阅读