Unity在C#中更改2个子对象中的文本

时间:2018-06-17 17:18:19

标签: unity3d

这应该很简单,但我无法弄清楚如何做到这一点。我有一个预制件,它是一个空的游戏对象,里面有一个球体和两个3dtext对象。我想要做的就是更改两个文本值。第一个称为“端口名称”,第二个称为“端口描述”。

只需一个文本对象即可。

foreach(Port p in GameData.gameData._ports) {
    GameObject port = Instantiate(Resources.Load("Port", typeof (GameObject))) as GameObject;
    port.GetComponentInChildren<TextMesh>().text = p._portName;
    port.transform.position = p._portLocation;
}

然而,当我试图找到他们两个时,我被困住了。此代码基于Unity页面的建议(查找中的错误“不能通过实例引用访问,而是使用类型名称限定”)

foreach(Port p in GameData.gameData._ports) {
    GameObject port = Instantiate(Resources.Load("Port", typeof (GameObject))) as GameObject;
    TextMesh t = port.Find("Port Name").GetComponent<TextMesh>();
    t.text = p._portName;

    t = port.Find("Port Description").GetComponent<TextMesh>();
    t.text = p._portDescription;

    port.transform.position = p._portLocation;
}

我显然错过了一些简单的事情 - 但我看不到它!

2 个答案:

答案 0 :(得分:2)

var texts = this.GetComponentsInChildren<TextMesh>();
texts[0].text = "first";
texts[1].text = "second";

https://docs.unity3d.com/ScriptReference/Component.GetComponentsInChildren.html

答案 1 :(得分:0)

只有一个文本对象,您的代码就很好。 有两个文本对象,您进行了复制但使用了会议。

也许它可以像下面那样工作:

port.Find("Port Name").GetComponent<TextMesh>().text = p._portName;
port.Find("Port Description").GetComponent<TextMesh>().text = p._portDescription;