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

发表于2019-01-07
评论0 504浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594
在手游精品化的路上,为了更好地美术表现,经常会在不同的界面上用很多字体。然而在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 这个方法原本用与判断一个字体所占高宽,我发现字体中不包含的字符有相同的特殊属性,大家可以利用这个方法总结参数判断出裁剪字体中不包含的字体。

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

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

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台