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

Unity/C#中字符串转KeyCode问题:KeyCode并非枚举类型

解决Unity中KeyCode字符串转枚举类型的问题

你遇到的报错是因为Enum.TryParse的调用方式错误——KeyCode本身就是枚举类型,正确的做法是用泛型版本指定枚举类型,或者在非泛型版本中传入typeof(KeyCode)作为参数。

方法一:泛型版Enum.TryParse(推荐)

这是最简洁的写法,直接指定KeyCode作为泛型参数:

string keyString = "UpArrow";
KeyCode targetKey;

// 尝试转换,第三个参数true表示忽略大小写(可选)
if (Enum.TryParse<KeyCode>(keyString, true, out targetKey))
{
    // 转换成功,正常使用targetKey
    Debug.Log($"转换后的按键:{targetKey}");
}
else
{
    // 转换失败,处理无效字符串的情况
    Debug.LogError($"无效的按键字符串:{keyString}");
}

方法二:非泛型版Enum.TryParse

如果需要兼容旧版本C#,可以用非泛型写法,需要手动转换结果类型:

string keyString = "UpArrow";
object parsedResult;

if (Enum.TryParse(typeof(KeyCode), keyString, true, out parsedResult))
{
    KeyCode targetKey = (KeyCode)parsedResult;
    // 转换成功,使用targetKey
    Debug.Log($"转换后的按键:{targetKey}");
}
else
{
    Debug.LogError($"无效的按键字符串:{keyString}");
}

注意事项

  • 确保存储的字符串和UnityKeyCode枚举的成员名称完全对应,比如"Space"、"LeftShift"、"A"都是有效的值;
  • 若不需要忽略大小写,去掉Enum.TryParse的第三个true参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:01:44