在我的游戏中,我从文本文件中获取一个随机字符串,并将GameObjects TextMeshPro.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的某些方面,但这一次不起作用。我甚至在这个组件生成文本之后编写了一个Coroutine来禁用和重新启用这个组件,但是这不起作用。
private IEnumerator SetShowNewMessageAfterFrame() {
yield return new WaitForEndOfFrame();
endOfContentText.enabled = false;
yield return new WaitForEndOfFrame();
endOfContentText.enabled = true;
Canvas.ForceUpdateCanvases();
}编辑:
根据Berk的应答项目设置/ TextMeshPro / Settings > Parse序列已经设置并产生了上述结果。
发布于 2022-04-26 02:23:12
TMpro组件有显示/隐藏转义序列的选项,您只需要在Project / TextMeshPro / Settings打开它,然后找到Parse序列选项并打开它。
https://stackoverflow.com/questions/72006713
复制相似问题