在比较旧版本的ngui中(NGUI 3.0前),使用动态字体(dynamic font)一直是有碎片化的问题,网上有各种方法解决,用得最多的应该是在游戏一开始把动态字体的贴图导入很多字使贴图撑大。
这种方法是因为在游戏过程中,如果锁屏或被其他应用中断等各种问题使游戏退到后台,动态字体贴图资源被释放,回来后的贴图与原来的贴图对不上,使获取的动态字体不对。
而撑大图片使得动态字体贴图的最小大小扩大,使得截取时没有问题
这种方法实行起来很简单:
在游戏一开始运行的脚本上的Start()函数中加上
[SerializeField] Font useFonts;
usedFonts.RequestCharactersInTexture(string, 26);
在编辑器上拖动字体到useFonts上,string也可以在编辑器上绑定一个文本文档.
但是这个方法在wp8上不适用。
官方网站说解决办法只有升级NGUI,但升级NGUI工程实在太大,只有在新版NGUI和旧版中debug找出原因
在旧版的NGUI中,UILabel在锁屏后不会跳转到函数MarkAsChanged ()中,这个函数就是记录这个label应该被刷新
public override void MarkAsChanged ()
{
hasChanged = true;
base.MarkAsChanged();
}
既然是ouverride,找到它的父类UIWidget中的这个函数
在新版的NGUI中debug中找到CallStack中找到调用父类这个函数的是
#if !UNITY_EDITOR
/// <summary>
/// Mark the UI as changed when returning from paused state.
/// </summary>
void OnApplicationPause (bool paused) { if (!paused) MarkAsChanged(); }
#endif
这个是系统事件,当游戏退到后台自动调用
而旧版的NGUI没有些这个函数
测试,就是这个问题
所以这就是NGUI官方说只有升级NGUI才能解决的办法,在这个bug上,是改了这个问题。
只要在旧版的NGUI的UIWidget上加上上面这一段就能解决问题
转载于:https://blog.51cto.com/13638120/2084829