如何通过自定义字符串变量获取对应的Keycode键码值?
问题原因
Keycode.customKey 写法无法生效,核心原因是枚举的成员访问属于编译期静态解析逻辑,customKey是运行时才会赋值的字符串变量,编译器无法在编译阶段将其识别为Keycode下对应名称的枚举成员。
实现方案
通过枚举字符串解析API即可动态根据变量值获取对应键码,优先使用带校验逻辑的Enum.TryParse方法避免无效值导致的运行时报错,示例代码(以Unity引擎的KeyCode枚举为例,其他框架下的KeyCode枚举实现逻辑通用):
using System; using UnityEngine; public class KeyBindHandler : MonoBehaviour { private string customKey = "A"; void Update() { // 传入字符串、是否忽略大小写、输出解析结果 if (Enum.TryParse<KeyCode>(customKey, true, out KeyCode targetKey)) { // 解析得到的targetKey就是KeyCode.A,可直接用于输入检测等业务逻辑 if (Input.GetKeyDown(targetKey)) { Debug.Log("对应按键被按下"); } } else { Debug.LogError($"配置的键名无效,不存在对应KeyCode:{customKey}"); } } }
注意事项
- 不推荐直接使用
Enum.Parse,当传入不存在的键名字符串时会直接抛出运行时异常,TryParse会通过布尔返回值标识解析结果,容错性更高 - 如果需要严格匹配枚举成员名的大小写,将
TryParse的第二个参数ignoreCase设置为false即可 - 传入的字符串需要和KeyCode枚举的成员名完全一致,例如要获取主键盘数字键1的键码,
customKey的取值需要为"Alpha1",而非"1"
内容的提问来源于stack exchange,提问作者Hisoi S
相关产品推荐
相关产品推荐

