在我的游戏中,我从文本文件中抓取一个随机字符串,并将GameObjectsTextMeshPro.Text更改为此行。
[SerializeField] private TextMeshProUGUI endOfContentText;
[SerializeField] private TextAsset messageTextFile;
private void OnEnable() {
TextChangerOuter(ParseTextAsset());
}
private void ParseTextAsset() {
var arrayString = messageTextFile.text.Split('\n');
foreach (var line in arrayString) {
listOfWords.Add(line);
}
}
private void TextChangerOuter(string text) {
var rand = new Random();
var randomKey = listOfWords.ElementAt(rand.Next(0, listOfWords.Count));
listOfWords.Remove(randomKey);
endOfContentText.text = randomKey;
}
我遇到的问题是这个文件中的某行包含"\n"个新行作为笑话的一部分。起初,我担心ParseTextAsset()
方法会将该行拆分为许多空行,但这并没有发生。我没有想到的是TextMeshPro不能正确地拆分下面的行。
奇怪的是,如果我进入检查器并手动更改文本,或者手动关闭并重新打开TextMeshPro组件,文本将按预期重新格式化。
过去我用过Canvas.ForceUpdateCanvases();
来修复UI的某些方面,但这次它不起作用了。我甚至写了一个协程来禁用和重新启用这个组件,但它生成文本后不起作用。
private IEnumerator SetShowNewMessageAfterFrame() {
yield return new WaitForEndOfFrame();
endOfContentText.enabled = false;
yield return new WaitForEndOfFrame();
endOfContentText.enabled = true;
Canvas.ForceUpdateCanvases();
}
编辑:
根据Berk Askin的回答,项目设置/TextMeshPro/设置〉[解析转义序列]已经设置并产生了上述结果。
2条答案
按热度按时间chhqkbe11#
TMpro组件有显示/隐藏转义序列的选项,您只需要在Project Settings / TextMeshPro / Settings中打开它,找到[Parse Escape Sequence]选项并打开它。
cqoc49vn2#
使用
<br>
标记强制文本换行。示例:
https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.2/manual/RichTextLineBreak.html