Unity3D使用动态字库字体错位

来源:互联网 发布:windows应用程序错误 编辑:程序博客网 时间:2024/04/28 11:37

转载自:http://blog.csdn.net/u012091672/article/details/17414811

NGUI讨论群:333417608

这个博客解决的是Label各种碎的问题(显示文字不对),如果是模糊的话不要看这个。


方法1:

升级Unity到4.3版本以上


方法2:

首先,需要一个文本,这个文本就是你项目的字典(如果没有,自己研究下)

之后,在游戏启动的时候实现以下步骤:

1、载入字典txt,所有的文字放到一个string里面(暂且叫做languageString)

(3.0以前版本)

2、通过全局配置或者其他任何方式,找到你的UIFont变量font(可以在任意的label上直接取得)

3、调用font.dynamicFont.RequestCharactersInTexture(languageString, font.dynamicFontSize, font.dynamicFontStyle)

(3.0(含)以后版本)

2、通过全局配置或者其他任何方式,找到你的动态字体Font变量font

3、调用NGUIText.RequestCharactersInTexture(fontlanguageString)


应该就可以了。


问题的根本原因不是很了解,但是我想问题应该出现在动态字体创建的texture大小上。

一般问题是出现在切换界面的时候,所以应该是这个时候,如果texture大小不够用,重新调整了texture,导致之前的texture的uv对应不上。

通过上面的方法,在游戏最开始就会创建一个2048*1024大小的texture(我用的是3000多个常用汉字只有不到2M,因为是纯色的图)

所以不会浪费太多内存,也比使用bitmap子图省。


提供一个3.0.7的脚本。之前版本的自己看着改吧。

[csharp] view plaincopy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4.   
  5. /// <summary>  
  6. /// SZUI dynamic font problem fix.   
  7. /// Usage : attach this to a gameobject or use SZUIDynamicFontProblemFix.DynamicFontProblemFix  
  8. /// </summary>  
  9. public class SZUIDynamicFontProblemFix : MonoBehaviour {  
  10.       
  11.     /// <summary>  
  12.     /// The font. your ttf  
  13.     /// </summary>  
  14.     public Font font;  
  15.       
  16.     /// <summary>  
  17.     /// The text. your language file  
  18.     /// </summary>  
  19.     public TextAsset text;  
  20.       
  21.     private static bool isFixed = false;  
  22.       
  23.     private static SZUIDynamicFontProblemFix inst;  
  24.     private static SZUIDynamicFontProblemFix Inst  
  25.     {  
  26.         get  
  27.         {  
  28.             if (inst == null)  
  29.             {  
  30.                 GameObject go = new GameObject(typeof(SZUIDynamicFontProblemFix).Name);  
  31.                 inst = go.AddComponent<SZUIDynamicFontProblemFix>();  
  32.             }  
  33.             return inst;  
  34.         }  
  35.     }  
  36.       
  37.     void Awake()  
  38.     {  
  39.         if (inst == null)  
  40.         {  
  41.             inst = this;  
  42.         }  
  43.         if (inst != null && inst != this)  
  44.         {  
  45.             Destroy(this.gameObject);  
  46.             return;  
  47.         }  
  48.         DynamicFontProblemFix();  
  49.     }  
  50.       
  51.     public static void DynamicFontProblemFix()  
  52.     {  
  53.         if (!isFixed)  
  54.         {  
  55.             isFixed = true;  
  56.             NGUIText.RequestCharactersInTexture(Inst.font, Inst.text.text);  
  57.         }  
  58.     }  

0 0
原创粉丝点击