Unity判断裁剪后字体中不包含的字符

发表于2019-01-07
评论0 3.5k浏览
在手游精品化的路上,为了更好地美术表现,经常会在不同的界面上用很多字体。然而在Unity优化的中其中一步就是优化字体,将Font尽量压缩,一般只使用中文的一级和二级字符。

具体优化方法可以参考这篇文章 如何精简Unity中使用的字体文件。

然而如果将玩家起名、帮派起名、宠物起名等玩家自定义字体进行裁剪可能会出现以下情况:

例如命名游戏中的某个名字:123訷123灬 最终只能显示123123,造成不好的用户体验,还可能被非法分子利用,起相同的名字加好友骗钱等。

所以引入以下方法,判断字符是否包含在字体中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CheckChar : MonoBehaviour {
    public Text textText;
    public void Check()
    {
        string str = textText.text;
        Font font = textText.font;
        font.RequestCharactersInTexture(str);
        CharacterInfo characterInfo;
        char[] array = str.ToCharArray();
        for (int i = 0; i < array.Length; i++)
        {
            font.GetCharacterInfo(array[i], out characterInfo);
            if (characterInfo.maxX == 1 && characterInfo.maxY == 1
                && characterInfo.minX == -1 && characterInfo.minY == -1
                && array[i] != ' ' && array[i] != ' ')
            {
                Debug.Log("不包含的字体:" + array[i].ToString());
            }
        }
    }
}

GetCharacterInfo 这个方法原本用与判断一个字体所占高宽,我发现字体中不包含的字符有相同的特殊属性,大家可以利用这个方法总结参数判断出裁剪字体中不包含的字体。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引