【问题标题】:Unity3D : Unable to change TextMesh in instantiated objectUnity3D:无法更改实例化对象中的 TextMesh
【发布时间】:2015-12-15 19:31:23
【问题描述】:

我实例化一个对象并使用以下代码更改其中的文本网格。

GameObject folder = (GameObject)Instantiate(prefab,<newLocation>,Quaternion.identity);
folder.name = "Folder1";
TextMesh content = GameObject.Find("Folder1").transform.GetChild(0).transform.GetChild(3).
                     gameObject.GetComponent<TextMesh>();
content.text = "New Content";

但是,当我运行场景时,文本网格仍然具有来自预制件的值并且没有更新。有没有人遇到过类似的问题或有任何解决方法的想法?

【问题讨论】:

  • 调试代码时,最后一行执行后 content.text 是否设置为“新内容”值?
  • 它在设置 this 的函数的最后一行之后,但是当它出来时它会变为“旧内容”

标签: unity3d


【解决方案1】:

您提到该项目已正确更新,但是当您创建新项目时,它不再起作用。

我认为您的问题是您使用相同的名称“Folder1”命名它们。然后您正在寻找一个名为 Folder1 的对象并返回第一个。

GameObject folder = (GameObject)Instantiate(prefab,<newLocation>,Quaternion.identity);
folder.name = "Folder1";
TextMesh content = folder.transform.GetChild(0).transform.GetChild(3).
                     gameObject.GetComponent<TextMesh>();
content.text = "New Content";

这可以解决您的问题。请注意,这不再是查找项目,而是使用来自新对象的引用。

【讨论】:

  • 我在这里使用 folder1 例如,在我的代码中,我用每个创建的对象递增计数。
  • 即使你像我建议的那样直接使用参考,你仍然遇到问题吗?
  • 尝试使用 Debug.Break() 以便您可以检查文本网格的状态。
【解决方案2】:

你确定你得到了正确的对象吗?您的GetChild 有点令人担忧。也许你可以尝试给你的对象一个标签并搜索它。 因此,您将具有您的文本网格的游戏对象的标签设置为 HasTextMesh,然后在您的代码中执行以下操作:

GameObject folder = (GameObject)Instantiate(prefab,<newLocation>,Quaternion.identity);
TextMesh content = GameObject.FindWithTag("HasTextMesh").GetComponent<TextMesh>();
content.text = "New Content";

【讨论】:

  • 首次加载时的场景运行良好,所以我确信GetChild 是正确的。只有当我在运行中重新加载具有不同内容的场景时,我才会遇到这个问题
  • 这段代码不起作用时你怎么调用它?你有你调用的方法中的代码吗?它在启动功能中吗?
  • 这段代码在一个从更新方法调用的函数中。
  • 你确定它找到了正确的东西吗?您是否可以尝试使用您的代码禁用整个游戏对象?看看它会不会消失?
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多