【小松教你手游开发】【unity实用技能】unity ngui wp8上使用动态字体消失或碎片化的问...

在比较旧版本的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值