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