Unity Text添加空格導致換行問題
借鑒於迷途小路
今天碰到了一個問題,在Text控件里面有兩行的字體,在第一行中添加一個空格,然后導致第一行后面的內容都跑到了第二行。
一開始沒搞懂,查了一下發現並不是bug。這個功能是Unity用於英語等西文的,是為了保證單詞不會分開顯示,所以第一行空格后面的字被Unity當成一個單詞給換行處理了。
那么如何解決呢?
-
方法1:使用全角空格
在輸入法里面把半角模式改為全角模式,然后輸入空格。
但這種方式輸入的空格太大,跟一個tab的寬度差不多了。所以不使用這種方法。 -
方法2:使用不換行空格
平時我們打出的空格都是帶這種換行功能的,但是也有一種不換行的空格,Unicode編碼為\u00A0。
好了,那么接下來使用這個編碼就行了。但是又出現了一個新的問題,雖然在C#里面對於UTF-8編碼的Unicode字符可以直接在字符串中輸入使用。但是lua並不支持這樣直接輸入。。。
那么如何解決呢?
之前被我想的很復雜,但其實方法很簡單。
"\u00A0" "\u{00A0}"
只需要稍微改變一下,用花括號括住16進制的字符編號即可。
下面是關於這些的部分lua官方中文手冊
Lua的字符串是可以保存8位的任意值,其中包括用’\0’表示0。一般而言,你可以用字符的數字值來表示這個字符。用轉義符\xXX方式,這里的XX必須是兩個16進制字符,或者用\ddd轉義符,而ddd則是必須是1到3個十進制字符。(注意,如果轉義符接着后面還是數字的話,那么這個轉義符必須寫滿3位。)
對於用UTF-8編碼Unicode字符可以用轉義符\u{XXX}(必須要一對花括號),這里的XXX是16進制的字符編碼。
可以使用方括號括起來來定義一個字符串。我們在兩個方括號之間插入n個等號來表示第n級開的方括號。因此一個0級開的方括號寫作[[,1級開的方括號寫作[=[,以此類推。閉方括號也作類似的定義;舉個例子,一個4級閉的方括號寫作]====]。一個長字符串有任何級的開方括號開始並由同級的閉方括號結束。這樣的描述可以包含除了同一級別閉方括號外的任意字符。在這個形式下是不受分行限制的,不解析任何轉義符,並且忽略任何級的方括號。其中任何形式的換行串(回車,換行,回車加換行,換行加回車)都會被轉換成單個換行符。