unity3d TextMeshPro未正确显示“\n”个新行

bkkx9g8r  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(468)

在我的游戏中,我从文本文件中抓取一个随机字符串,并将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/设置〉[解析转义序列]已经设置并产生了上述结果。

chhqkbe1

chhqkbe11#

TMpro组件有显示/隐藏转义序列的选项,您只需要在Project Settings / TextMeshPro / Settings中打开它,找到[Parse Escape Sequence]选项并打开它。

cqoc49vn

cqoc49vn2#

使用<br>标记强制文本换行。
示例:

Add line breaks wherever you want

Add line breaks <br>wherever <br>you <br>want

https://docs.unity3d.com/Packages/com.unity.textmeshpro@3.2/manual/RichTextLineBreak.html

相关问题