首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之Text字体花屏(二十二)
2016
10-26

UGUI研究院之Text字体花屏(二十二)

今天我同事说在老项目用的是unity4.7.2打包发布韩文和泰文,偶尔会出现字体花屏的问题,但是中文是好的。(我也不知道怎么解释,只能靠猜吧)我们用的TTF动态字体,Text每次赋值的时候Unity会生成贴图,以及保存每个字的UV信息,那么显示字体的时候根据UV信息去生成的贴图里取最终渲染在屏幕上。那么出现花屏很可能就是贴图更新了,而还在用老的UV取图,所以就取不到了。这个时候需要重新刷新一下Text理论上就正确。

下面的代码挂在任意对象上。意思就是Font.textureRebuilt监听字体的贴图是否发生rebuild的事件。然后调用text.FontTextureChanged();重新刷新一下字体

我也不确定在别的unity版本,或者别的文字里还会出现这个问题。欢迎大家测试,也欢迎大家在下面给我留言。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. momo大神,我碰到几个问题想向你请教下,,不知道怎么留言,只能找你最近发的贴子留言了。希望能帮我解惑下1、用u3d自带的CharacterController控制角色,有个坡已经很陡了,虽然角色走不上去,但是跳跃在落下的时候可以稳稳的站在坡上,如何才能让他跳跃 也跳不上去呢?难道只能把坡变为90度的陡坡吗?2、加载的时候当加载多个assetBundle的时候怎么处理, www只能一次加载一个,执行多次的协程www,这样子加载进度好像不是非常好控制3、镜像动画是不是只能说在u3d里面复制一个原始动画出来。 勾上镜像,可否直接用代码实现镜像呢。这个也没有找到相关API,求mono指点

  2. 雨神 你这种方式不是和NGUI里UILabel的处理方式一样的吗 但是他还是会出现字体花屏的static void OnFontTextureChanged () { Debug.LogError(“OnFontTextureChanged”); for (int i = 0; i < mList.size; ++i) { UILabel lbl = mList UGUI研究院之Text字体花屏(二十二) - 雨松MOMO程序研究院 - 1 ; if (lbl != null) { Font fnt = lbl.trueTypeFont; if (fnt != null) { //请求字符加入到纹理中; fnt.RequestCharactersInTexture(lbl.mText, lbl.mPrintedSize, lbl.mFontStyle); } } } for (int i = 0; i < mList.size; ++i) { UILabel lbl = mList UGUI研究院之Text字体花屏(二十二) - 雨松MOMO程序研究院 - 2 ; if (lbl != null) { Font fnt = lbl.trueTypeFont; if (fnt != null) {#if UNITY_EDITOR lbl.panel.RebuildAllDrawCalls();#else //将Label Widget从Panel中删除; lbl.RemoveFromPanel(); //确保这个Widget在Panel中; lbl.CreatePanel();#endif } } } }#endif

  3. 我在Unity5.1.2版本也遇到过,UI界面切换的时候中文字体会花屏,试了很多办法,后来在一个帖子上看到一个解决办法,在初始化的时候构建一个足够大的字体贴图,我是这么解决的 if (chineseTxt == null) { TextAsset txt = Resources.Load(“use”) as TextAsset;//读取只写了一个字的use.txt chineseTxt = txt.ToString(); } baseFont.RequestCharactersInTexture(chineseTxt,512); Texture texture = baseFont.material.mainTexture;回去也试试 雨松大大的方法