这应该很简单,但我无法弄清楚如何做到这一点。我有一个预制件,它是一个空的游戏对象,里面有一个球体和两个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;
}
我显然错过了一些简单的事情 - 但我看不到它!
答案 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;