TextMesh Pro软连字符()功能异常求助
TextMesh Pro软连字符异常的替代解决办法
针对你遇到的软连字符(­)在TMP中显示异常的问题,以下是几种可靠的替代实现方式:
1. 零宽空格(\u200B)替代
直接在需要断字的位置插入零宽空格(Unicode编码U+200B),这个字符在正常显示时完全不可见,仅作为TMP的断字触发点。当文本需要换行时,TMP会自动在该位置拆分单词;如果不需要换行,不会有任何多余显示。
如果需要断字时显示连字符,可结合TMP的条件格式:
ear\u200B-ly
这种写法会在断字时显示ear-在下一行开头显示ly,正常显示时则是完整的early。
2. 启用TMP内置断字字典
无需手动插入任何字符,直接利用TMP的自动断字功能:
- 选中TMP Text组件,在
Text Settings→Word Wrapping中勾选Hyphenation - 在
Hyphenation Prefix中填入-,确保断字时自动显示连字符 - 若默认字典不包含你的目标单词,可在TMP Settings的
Hyphenation Dictionary中添加自定义规则(比如给early添加ear-ly的断字方式),或导入.dic格式的自定义断字字典
3. HTML实体解析(需开启HTML支持)
如果零宽空格仍有问题,可尝试在文本中直接输入软连字符的HTML实体­或零宽空格的​,前提是要在TMP Text组件的Extra Settings中勾选Parse HTML,TMP会自动解析这些实体为对应字符。
4. 自定义脚本替换标记
如果习惯用自定义标记(比如|)来标记断字位置,可编写简单脚本自动转换:
using TMPro; using UnityEngine; public class TMPHyphenFix : MonoBehaviour { [SerializeField] private TMP_Text targetText; [SerializeField] private string customMarker = "|"; private void Awake() { if (targetText == null) return; targetText.text = targetText.text.Replace(customMarker, "\u200B"); } }
将脚本挂在带TMP Text的对象上,在文本中用ear|ly标记断字位置,脚本会自动替换为零宽空格。
额外排查要点
- 确认TMP版本为最新:旧版本TMP存在软连字符兼容性bug,更新后可解决大部分问题
- 检查字体字形:确保使用的字体(或 fallback 字体)包含
U+00AD(软连字符)和U+200B(零宽空格)的字形,避免显示方块 - 验证断字设置:确认
Hyphenation功能已启用,且Hyphenation Prefix正确设置为-
内容的提问来源于stack exchange,提问作者Andrew Pullins
相关产品推荐
相关产品推荐

