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}"); }
注意事项
- 确保存储的字符串和Unity
KeyCode枚举的成员名称完全对应,比如"Space"、"LeftShift"、"A"都是有效的值; - 若不需要忽略大小写,去掉
Enum.TryParse的第三个true参数即可。
内容的提问来源于stack exchange,提问作者Lewis_CTRL
相关产品推荐
相关产品推荐

