Unity新输入系统如何实现按下键盘按键时记录对应大小写字母字符
Unity新输入系统获取大小写敏感字符解决方案
推荐方案(原生支持,适配性最强)
Unity新输入系统自带了专门的文本输入回调InputSystem.onTextInput,会直接返回经过键盘状态(Shift、CapsLock)、当前键盘布局处理后的最终字符,不需要手动处理任何大小写判断逻辑,完全符合需求。
实现步骤
- 确保项目已经正确启用新输入系统,引入命名空间
using UnityEngine.InputSystem; - 挂载以下脚本到任意常驻场景的GameObject上即可:
using UnityEngine; using UnityEngine.InputSystem; public class TextInputLogger : MonoBehaviour { private void OnEnable() => InputSystem.onTextInput += LogInputChar; private void OnDisable() => InputSystem.onTextInput -= LogInputChar; private void LogInputChar(char inputChar) { // 输出结果天然区分大小写,按a输出a,Shift+a输出A,CapsLock开启时按a输出A Debug.Log(inputChar); } }
方案优势
- 自动适配Shift组合键、CapsLock锁定状态,无额外判断逻辑
- 支持所有标准键盘布局、特殊字符输入,不会出现自定义判断的适配问题
- 触发时机和输入行为完全同步,不会出现漏判、错判
备选手动实现方案(仅适用于自定义按键映射场景)
如果你有特殊需求要手动控制输入逻辑,可以通过判断Shift和CapsLock的异或状态来转换字符大小写,仅适合标准英文键盘场景使用:
using UnityEngine; using UnityEngine.InputSystem; public class ManualCharInput : MonoBehaviour { private void Update() { var keyboard = Keyboard.current; if (keyboard == null) return; // 遍历A-Z按键按下事件 foreach (var key in keyboard.allKeys) { if (key.wasPressedThisFrame && key.keyCode is >= Key.A and <= Key.Z) { char baseChar = key.displayName.ToLower()[0]; // Shift和CapsLock只要有一个激活就输出大写,两个同时激活为小写 bool needUppercase = keyboard.shiftKey.isPressed ^ keyboard.capsLockKey.isPressed; Debug.Log(needUppercase ? char.ToUpper(baseChar) : baseChar); } } } }
内容的提问来源于stack exchange,提问作者Code Flow
相关产品推荐
相关产品推荐

