unity如何在中文文字換行時實現排版換行,避免標點符號出現在行首等比較醜的情況?

時間 2021-06-04 23:55:28

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 有很多國家生產的電腦上都會帶有自己國家語言的字元。比如說吧,我的乙個同學有一台鍵盤上全是阿拉伯字母的手提電腦,我也知道我的南韓朋友鍵盤上刻有諺文字元。以此類推,希臘人的鍵盤上有希臘字母 俄羅斯人的鍵盤上有西里爾字母 武漢歐亞外語學校 首先開啟控制面板,單擊開始圖示,找到...