【问题标题】:C# 'KeyCode' does not contain a definition for 'numberKey'C#“KeyCode”不包含“numberKey”的定义
【发布时间】:2021-03-04 18:19:30
【问题描述】:

我正在尝试通过制作几个不同的“if 语句”来获得捷径。相反,我只更改一个由 for 循环给出的值。 “KeyCode.Alpha1”建议我按键盘顶部的“1”键,依此类推。 所以“numberKey”变量存储了一个字符串“Alpha1”,但它只是将其读取为“numberKey”。然后我收到一条错误消息,说“KeyCode”不包含“numberKey”的定义。帮助

    private void Inventory()
    {
        for (int i = 1; i <= items.Count; i++)
        {
            string numberKey = "Alpha" + i.ToString();
            if (Input.GetKeyDown(KeyCode.numberKey))
            {
                items[currentItem].gameObject.SetActive(false);
                currentItem = i--;
                items[currentItem].gameObject.SetActive(true);
            }
        }
    }

【问题讨论】:

    标签: c# variables


    【解决方案1】:

    KeyCode 是一个枚举,因此您不能只是动态地构建一个与枚举同名的字符串并期望它能够工作。而是使用 Enum.Parse:

    Input.GetKeyDown(Enum.Parse(typeof(KeyCode), numberKey, true));
    

    Enum.Parse 采用 Enum 的文本表示并从中生成枚举。所以它基本上是说“返回名称等于 numberKey 的 KeyCode 枚举条目”最后的布尔值告诉它不区分大小写。

    【讨论】:

      【解决方案2】:

      您可以尝试在 enum 和 int 之间进行转换:

              int Alpha0Key = (int)KeyCode.Alpha0;
      
              for (int i = 0; i < items.Count; i++)
              {
                  if (Input.GetKeyDown((KeyCode)(Alpha0Key+i))
                  {
                      items[currentItem].gameObject.SetActive(false);
                      currentItem = i;
                      items[currentItem].gameObject.SetActive(true);
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多