Unity中的Text内容有空格导致换行,以及让每行首字符不出现标点符号

ps:本篇内容应该属于半转载半原创,因为空格换行和首字符不出现标点。都是查询资料后我借用别人的成果再进行的整理的。但是发布时转载和原创只能选择一个因此我就选择其一了。

先来说下错误换行的问题,Unity中的Text组件有多行文本时会错误的出现提前换行,导致一行文本后面有大块空白区域

错误换行解决方法:原文地址:https://www.cnblogs.com/leoin2012/p/7162099.html

我这边还是说下原因

当字符串中带有半角空格,且半角空格后面的字符串内容超过文本剩余显示宽度时,Text组件会将后面的整段文字做换行。这个并不是bug,而是Text组件按照拉丁西语的分词习惯做line break,半角空格相当于分隔符,分隔空格前后的内容,并视之为单词。这种分词规则在西语中是正确的,但用在中文就水土不服了:整段的中文内容,粗暴地按半角空格分成了3部分,第一行空格后面的大段文字被判定为一个单词,剩余宽度无法显示,就被整个换到了第二行。

解决方案原理:我们平时用的Space键的空格,是换行空格(Breaking Space,Unicode编码为\u0020)空格前后都运行自动换行,与之对应的是不换行空格(Non-breaking space,Unicode编码为\u00A0)显示和换行空格一样,主要是禁止他自动换行。Breaking Space的存在让西语得以分隔单词,从而正确地分词排版,但放在中文里是多余的存在,中文没有单词概念,不需要做分隔。

知道Breaking Space和Non-breaking space后解决就方便主要把文本中的所有Breaking Space换成Non-breaking Space。

(我的代码是把换行问题和每行首字符不出现标点符号编写在一起的,因此等讲完怎么解决每行首字符出现标点的问题后再贴上我的代码)

下面来说下首字符出现标点符号的解决方案:

原因还是因为unity中的text分词规则对中文并不友好所导致的。

解决原理很简单,如果碰到首字符是标点符号,那么就提前一个字符或者多个字符让他换行就可以了。

如果对中文排版要求比较高,就要考虑自己动手做Text的布局实现了。

ps:以下是我整合解决空格换行和首字符标点符号而整理的脚本。没有做特别的优化,比如首字符的标点为成对标点符号的左边符号时也会判断为首字符是符号然后提前一个字符或多个字符进行换行。如果需要优化文本显示布局,请自己后续优化。

另外说下此文本是继承unity中自带的Text来实现的因此使用时将Text对象上原来的text组件移除,在挂上这个脚本,和原来的text一样的用法。

using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.UI;


[RequireComponent(typeof(Text))]
public class TextFit :  Text{
   

    /// 标记不换行的空格(换行空格Unicode编码为/u0020,不换行的/u00A0)
	public</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TenderRain。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值