Unity3D:无法在实例化对象中更改TextMesh

时间:2015-12-15 08:20:24

标签: unity3d

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

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";

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

2 个答案:

答案 0 :(得分: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";

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

答案 1 :(得分:0)

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

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