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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:54:00