1樓:忠國
新建自己的指令碼
引入這些
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Text.RegularExpressions;
並且保證自己的指令碼繼承自 Text類
內容:public class 自己的類 : Text
////// 用於匹配標點符號(正規表示式)
/////private readonly string strRegex = @"\p"; //啟用這個將過濾所有標點,下面的可以選自需要避免的標點
private readonly string strRegex = @൪;
///用於儲存text元件中的內容
lt;/summary>
private System.Text.StringBuilder MExplainText = null;
lt;summary>
用於儲存text生成器中的內容
lt;/summary>
private IList MExpalinTextLine;
protected override void OnPopulateMesh(VertexHelper toFill)
base.OnPopulateMesh(toFill);
StartCoroutine(MClearUpExplainMode(this,text));
lt;summary>
/// 整理文字。確保首字母不出現標點
lt;/summary>
lt;param name="_component">text元件
lt;param name="_text">需要填入text中的內容
lt;returns>
IEnumerator MClearUpExplainMode(Text _component, string _text)
_component.text = _text;
如果直接執行下邊方法的話,那麼_component.cachedTextGenerator.lines將會獲取的是之前text中的內容,而不是_text的內容,所以需要等待一下
yield return new WaitForSeconds(0.001f);
MExpalinTextLine = _component.cachedTextGenerator.lines;
需要改變的字元序號
int mChangeIndex = -1;
MExplainText = new System.Text.StringBuilder(_component.text);
for (int i = 1; i < MExpalinTextLine.Count; i++)
首位是否有標點
bool _b = Regex.IsMatch(_component.text[MExpalinTextLine[i].
startCharIdx].ToString(), strRegex);
bool _B = Regex.IsMatch(_component.text[MExpalinTextLine[i].
startCharIdx -1].ToString(), strRegex);
if (_b)
mChangeIndex = MExpalinTextLine[i].startCharIdx - 1;
MExplainText.Insert(mChangeIndex, " ");
//MExplainText.Replace
(_component.text[MExpalinTextLine[i].startCharIdx].ToString(), "\n" + " ");
if (_B)
mChangeIndex = MExpalinTextLine[i].startCharIdx - 2;
MExplainText.Insert(mChangeIndex, "\n");
else
mChangeIndex = MExpalinTextLine[i].startCharIdx - 1;
MExplainText.Insert(mChangeIndex, "\n");
34;.(||" + markList + "
_component.text = MExplainText.ToString();
component.text = _text;
這個指令碼是通過在標點之前的乙個字前插入空格,將標點之前的乙個字擠下來,也可以用\n換行,將最後乙個字擠下來,但是這個寫法有個缺點,就是多個標點連在一起時,會導致多次空格或者回車,目前沒有解決,希望有大神解決這個問題。
2樓:沈柏安
在專案裡面幹過這事,重寫unity裡面的Text元件和TextGenerator。具體可以參考ugui的原始碼來重寫Text元件(基本是照抄),至於TextGenerator因為沒有原始碼只能猜猜猜了。
哦,對了,這種規避某些字元在換行後成為第乙個字元的做法俗稱叫做「避頭點」。同樣的,有些字元是不希望在段落的末尾。
3樓:玉昆
Unity中文排版支援的非常糟糕。有英文或者空格混合的時候斷行完全是錯的。更不要說段落縮排,防止標點放在行首這樣的功能了。
我的做法是參考ngui重寫了個richtext ,支援了遊戲自定義的富文字格式,鏈結,動態表情等功能。也完善了斷行和排版。
主要參考nguitext裡面的排版實現,從效能和效果上都是ok的。
如何為中文文字做中文標籤推薦?
陳義 首先,如果有比文字更可靠的資料來源,一定要把它們充分利用起來。這是廢話。其次,如果能把這個問題轉化成有監督的問題,要盡可能地把它轉化成有監督的問題。無監督的問題終歸更難處理點,除非你天才地發現了一些簡單易操作的先驗規律,否則無監督方法就是拼時間的體力活。第三,大眾讀物大體可以分為兩類,實體密集...
如何在 Mac 下的 LaTeX 中使用中文字型
felixlee 其實,Mac 下的TeX發展套件中,利用CJK巨集包安裝中文字型的步驟與Linux發行套件Ubuntu下安裝的過程大同小異。主要的問題是如何按中文排版習慣來排版。相關的安裝文件URL TeX 排版對於中文來說,主要是如何處理新新體,以及現有字型檔中沒有的字。相關的文章之前在網上發現...
非中文英文母語國家是如何在電腦上輸入文字的?
stzoakhaarlmee 有很多國家生產的電腦上都會帶有自己國家語言的字元。比如說吧,我的乙個同學有一台鍵盤上全是阿拉伯字母的手提電腦,我也知道我的南韓朋友鍵盤上刻有諺文字元。以此類推,希臘人的鍵盤上有希臘字母 俄羅斯人的鍵盤上有西里爾字母 武漢歐亞外語學校 首先開啟控制面板,單擊開始圖示,找到...