新公司入職第一周,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轉換,請期待