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

Unity中如何检测键盘按下的Emoji并获取其Unicode?

Unity中检测Emoji输入与获取Unicode编码的实现方案

1. 捕获输入字符并判断Emoji

Unity的Input.inputString可以捕获当前帧所有可打印输入字符,包括键盘或输入法输入的Emoji。你可以结合Emoji的Unicode范围,编写判断逻辑筛选目标内容:

void Update()
{
    if (!string.IsNullOrEmpty(Input.inputString))
    {
        foreach (char inputChar in Input.inputString)
        {
            if (IsEmoji(inputChar))
            {
                int unicodeCode = (int)inputChar;
                Debug.Log($"检测到Emoji: {inputChar},Unicode编码: 0x{unicodeCode.ToString("X4")}");
                // 这里添加你的业务逻辑,比如存储、显示该Emoji
            }
        }
    }
}

bool IsEmoji(char targetChar)
{
    // 覆盖主流Emoji的Unicode范围,可根据需求补充
    return (targetChar >= 0x1F600 && targetChar <= 0x1F64F) || // 表情符号
           (targetChar >= 0x1F300 && targetChar <= 0x1F5FF) || // 符号象形图
           (targetChar >= 0x1F680 && targetChar <= 0x1F6FF) || // 交通地图符号
           (targetChar >= 0x1F1E0 && targetChar <= 0x1F1FF) || // 国旗
           (targetChar >= 0x2600 && targetChar <= 0x26FF) ||   // 杂项符号
           (targetChar >= 0x2700 && targetChar <= 0x27BF) ||   // 装饰符号
           (targetChar >= 0xFE00 && targetChar <= 0xFE0F);     // Emoji变体选择符
}

2. 处理多码点组合Emoji

部分Emoji由多个Unicode码点组合而成(比如带肤色的表情👨🏿‍💻),这时候需要用StringInfo拆分Unicode字符簇,完整识别组合型Emoji:

void Update()
{
    if (!string.IsNullOrEmpty(Input.inputString))
    {
        StringInfo emojiInfo = new StringInfo(Input.inputString);
        for (int i = 0; i < emojiInfo.LengthInTextElements; i++)
        {
            string fullEmoji = emojiInfo.SubstringByTextElements(i, 1);
            Debug.Log($"检测到组合Emoji: {fullEmoji},Unicode编码序列: {GetUnicodeSequence(fullEmoji)}");
        }
    }
}

string GetUnicodeSequence(string emoji)
{
    StringBuilder sequenceBuilder = new StringBuilder();
    foreach (char c in emoji)
    {
        sequenceBuilder.Append($"0x{((int)c).ToString("X4")} ");
    }
    return sequenceBuilder.ToString().Trim();
}

3. 直接获取Unicode编码

无论是否是Emoji,只要拿到输入字符,直接转换为整数即可得到对应的Unicode码点:

char singleEmoji = '😀';
int unicodeCode = (int)singleEmoji;
Debug.Log($"Unicode编码: 0x{unicodeCode.ToString("X4")}"); // 输出0x1F600

额外注意事项

  • Unity默认Text组件可能不支持全量Emoji,需替换为支持Emoji的字体(如Noto Color Emoji、Segoe UI Emoji),导入后设置给Text组件即可。
  • 移动端输入法输入Emoji时,Input.inputString可能存在延迟,可改用OnGUI捕获事件提升及时性:
void OnGUI()
{
    Event currentEvent = Event.current;
    if (currentEvent.type == EventType.KeyDown && currentEvent.character != '\0')
    {
        char inputChar = currentEvent.character;
        if (IsEmoji(inputChar))
        {
            Debug.Log($"检测到Emoji: {inputChar},Unicode: 0x{((int)inputChar).ToString("X4")}");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:57:48