1 我们用的TTF动态字体,Text每次赋值的时候Unity会生成贴图,以及保存UV信息,显示字体时根据UV信息去生成的贴图里取出渲染到屏幕上。出现花屏可能是贴图更新了,但UV信息没有更新,所以就取不到,这时需要重新用新的UV去取。
2 TTF字体的文件下,会生成一个texture文件及material文件。当需要显示文字的时候,会通过RequestCharactersInTexture函数向Font请求更新文字信息,然后使用GetCharacterInfo获取文字信息来渲染。在调用GetCharacterInfo的时候要保证文字都通过RequestCharactersInTexture请求过了。如果请求的时候,Font内部维护的texture不够用了,就会触发textureRebuildCallback的回调,通知外部Font的对象,其内部的texture被更新了,外部应该重新刷新。
Unity的Font默认的texture大小是256X256,在纯英文的情况下,是完全够用的。但是汉字,日文等字体就完全不够了。如果unity的刷新回调触发,则要重新刷新所有的文本控件。这样就容易出现字体破碎的情况。因为一般情况下我们请求的文字不会很多,使用的texture不会超过256x256,unity不会自动扩展texture大小。但我们请求的文字过多时,texture如果不够了,这时就需要在回调函数中刷新字体,如果我们连续请求文字,每次texture都需要扩展(需要回调刷新),于是就会出现不停刷新,字体也可能会破碎。
解决办法:可以游戏刚开始时请求足够多的文字,那么unity就会内部自动扩展font的texture大小,于是就可以避免不停刷新的情况
参考:Unity中字体的一些知识 - 周小菲 - 博客园