解决Unity Font字体破碎问题

 使用Unity的动态字体绘制文字的时候,在多次打开面板时出现文字破裂问题。

文字渲染原理:

通过RequestCharactersInTexture函数向Font请求更新文字信息,然后使用GetCharacterInfo获取文字信息来渲染。在调用GetCharacterInfo的时候要保证所有文字都通过RequestCharactersInTexture请求过了,这样文字才能顺利的被渲染出来。 如果请求的时候,Font内部维护的texture不够用了,就会触发textureRebuildCallback的回调,通知外部使用Font的对象,其内部的texture被更新了,外部应该重新刷新。而这个重新刷新的过程就往往会导致界面上的文字破裂,因为外部的Texture重新计算并调整大小,其上面原来的文本信息就会被破坏。


解决方法:

在启动游戏时通过预加载的方法改变Font内部维护的Textrue的大小,让其有足够的空间容纳外部请求的文本信息。

我的方法是 在网上下载一个常用汉字3500字的txt文档,将它导入到项目中,然后再启动游戏后首先使用这个文本向Font请求信息,这样便会在一开始就将Font内部的Texture设置的较大。


代码:

 
 public static string generalCharacter = null;

public static void PreLoadGeneralText()
        {
            if (generalCharacter == null)
            {
                TextAsset txt = LoadResource("Base/Font/generalText") as TextAsset;
                generalCharacter = txt.ToString();  
            }

            Font font = GetDefaultFont().dynamicFont;
            font.RequestCharactersInTexture(generalCharacter);
        }
 其中LoadResource方法是封装的一个加载方法, 这里可以替换成 Resources.Load;

GetDefaultFont()方法是加载我项目中使用的默认字体


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值