将表情符号正确添加到游戏中

Adding emojis properly to a game

我们正在尝试使用 Emoji One 和 Unity with TextMeshPro 为我们的游戏添加表情符号。我们有一个显示所有表情符号的 window 打开,然后用户可以选择他们想要的,我们有 运行 删除它们并在它们后面键入文本的问题。

这是我们的代码,精灵的名称是这样的:1f609,但是当我们 运行 代码并将其添加到输入字段时的输出是这样的:\ud83d\ude09

string name = _image.sprite.name;
int hexNumber = int.Parse(name, System.Globalization.NumberStyles.HexNumber);
string c = char.ConvertFromUtf32(hexNumber);
_inputField.text += c;

预期的结果是我们应该只看到一个 unicode 字符(我认为),这样我们就可以使用退格键正确删除表情符号,并且当您输入表情符号时,它不会创建两个要删除的字符并且它不会将字符放在两个表情符号点之间,因此当我们输入文本时它会中断。

现在,如果我们删除文本,它会留下空方块,如果我们之后通过在框中键入来添加文本,它会将字符一分为二。

C# 世界中的 Unicode 表示 UTF-16,因此您现在必须处理这些 "surrogate pairs"。一种解决方案是检测您是否只是删除了代理对的一半,在这种情况下也删除了另一半。代理对的前半部分始终在 [D800h, DBFFh] 范围内,后半部分始终在 [DC00h, DFFFh] 范围内,因此当您删除其中一个范围内的 char 时,您知道应该删除一个更多的字符,你也知道那个字符在哪里(在刚刚删除的字符之前或之后)。