【问题标题】:Unity 2019 - linebreak \n not working for UI text elementsUnity 2019 - 换行符 \n 不适用于 UI 文本元素
【发布时间】:2020-06-09 10:35:46
【问题描述】:

我在让换行符适用于我的 Unity UI 元素时遇到了一些困难。 (Unity 2019.2.17f1 个人版)

我正在做的是:

string twoLinesOfText = LanguagePack.getTextByID(ID);

结果:

twoLinesOfText = "Text line 1\nText line 2"

预期输出:

Text line 1
Text line 2

现实:

Text line 1\nText line 2

我尝试过使用“\n”、“\\n”和“\r\n”。这些都没有给出预期的结果。

我将文本分配给组件使用

UITextComponent.GetComponent<Text>().text = twoLinesOfText;

这种直接分配会有问题吗?我是否需要通过 toString() 推送我的字符串或以某种方式解析它以使 \n 被识别?

解决方法: 我有一个解决方法。通过为我的 LanguagePack 使用 XML 文件,并在基本文件中插入(输入)换行符,我将换行符输入到我的 Unity UI 元素中。显然这并不理想。 回读 Debug.Log 中的字符串不会显示最终使用了哪个换行代码:它只是根据 XML 文件中的(输入)换行符来中断字符串。

【问题讨论】:

  • 你试过了吗

标签: unity3d unity-ui


【解决方案1】:

您无法通过语言包导入它。你应该做的是:

string line1 = LanguagePackage.getTextByID(ID1);
string line2 = LanguagePackage.getTextByID(ID2);
string twoLinesOfText  = line1 + "\n" + line2;
UITextComponent.GetComponent<Text>().text = twoLinesOfText;

【讨论】:

  • 是的,这行得通,谢谢。不过,这意味着要运行许多额外的 I/O。我认为一次性收集整个文本可能更便宜 -> 在“\n”上拆分并获取结果。
【解决方案2】:

我自己也遇到这个问题,经过一番调查,发现我认为字符串中的 \n 已转换为 \\n,因此它在文本框中显示为 \n。 在调试期间将其转换为 \n 得到了我想要的多行文本。 现在来调查它在我的数据链中的哪个位置被转换了:-)

好的,调查完成。使用 File.WriteAllLines 函数从 Visual Basic 中的程序在我的 PC 上保存了一个文件,其中一行有几个 \n 实例。在记事本中查看该文件表明它已正确写入该行。当我在统一程序中使用 File.ReadAllLines 时出现问题,因为它将这些 \n 实例转换为 \\n。据我所知,这不是一个记录在案的行动,事实上,在阅读 MS 文档时,可能会认为它会将那条线分成多条线,但它没有这样做。 我签入了我的 VB 程序,但 File.ReadAllLines 并没有以这种方式运行。这可能与环境有关,VB 不使用\n,C# 使用。我通过在字符串上标记替换来解决问题,例如字符串。替换(“\\n”,“\n”)。尝试使用 File.WriteAllLines 从 C# 写入字符串也可能会与 \n 混淆。

天哪,这很难写,因为这里的编辑器弄乱了 \\n 并将其转换为 \n,我最终不得不使用 \\\n

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多