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
相关产品推荐
相关产品推荐

