Unity Text添加空格导致换行问题的两种解决方法,还有lua的解决方法

目录

借鉴于迷途小路

今天碰到了一个问题,在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级闭的方括号写作]====]。一个长字符串有任何级的开方括号开始并由同级的闭方括号结束。这样的描述可以包含除了同一级别闭方括号外的任意字符。在这个形式下是不受分行限制的,不解析任何转义符,并且忽略任何级的方括号。其中任何形式的换行串(回车,换行,回车加换行,换行加回车)都会被转换成单个换行符。