新公司入职第一周,TD(技术负责人)将一个同事遇到的问题交给我了,聊天的图文混排。同事在研究3天后,TD想我试下,我google和bing后看到方法如下;
项目是使用NGUI中,UILabel里font 分为bitmapFont(图片字体)和trueTypeFont(文字字体);2者只能选其一
我各种研究目前发现的实现图文的解决方法如下:
1.生成一个新的字体,把表情和常用字体合成一个新的字体
2.根据字符分割成多个UILabel和UIsprite,
3.修改NGUIText,思路是2个Label,一个只负责显示文字,一个负责显示渲染图片,用isSymbol区分是渲染图片还是文字。
4.新建一个SymbolInput,继承之UIInput,同时在创建一个SymbolLabel继承MonoBeahvior,在Awake()方法里,添加2个UILabel,然后根据分别在不同的Label上渲染,控制渲染的位置就可以实现,这个方法也修改了UILabel里OnFill方法
详细说
一.http://www.xuanyusong.com/archives/2908雨松大神的研究
劣势
1.不支持动态TTF字体的图文混排,凡是参与图文混排的文字都必须打在一个BitMap上面,这是做中文版本无法接收的,因为我们必须要用TTF动态字体。
2.NGUI图文混排的高度计算的有问题。看到了吗?如果你参与图文混排的两个图片大小不一样,如果文字进行换行,高度会计算错误。。
3.比如想第一个文字设置成红色,然后跟着一个图片,然后在跟一个绿色的字,那么它也做不成。。
4.调节文字间的横向和纵向的距离,它也做不成。
二.http://blog.gamerisker.com/archives/333.html
劣势1:对资源比较消耗
2.输入框里不能显示图片,只能生成内容可以有图片,用图片名字对应sprite.name
三.http://www.kiss-soft.net/Blogs/ngui-dynamicfontpic/
优劣的还没研究
等我更新下
四.http://blog.gamerisker.com/archives/530.html
目前项目采用的,把2个代码认真看完对NGUI的了解加深很多,我是自己看着写了一遍,遇到有public SybmolLabel newLabel,在SymbolInput 看不到,虽然是public 的,那是要切到Debug模式,在Inspector上右击就可以看到了,把值托进去,我能说我找了很久没有发现。这样的原因是Input 设置显示的内容,所有被隐藏。瞬间感觉自己蠢了。
还有的问题是,newLabel.labelText.color.有时会报null值。
TextLabel和SymbolLabel的位置要根据运行时候重新调整,问题在于目前是可以动态输入,{01}自动切换成图片,但是删除的时候缺有问题了。“{01}”变成“{01”,这个功能会在我做完项目功能后,来补上。还有一个是表情占的空间太大了。
优势是对NGUI代码改动很少。
预告下一期做插件关于excl转换,请期待