我有一个gameObject'gm',它有一个脚本。该脚本引用了Transform parentFoo,并且需要访问一个非静态的public int'x',它存在并在一个脚本中定义,该脚本作为组件附加到多个子节点'bar',它们都是parentFoo的子节点。然后我试图将所有这些内容放入列表中,但问题在于实际获取它们。完成这项工作的最简单方法是什么?
以下代码演示了我要完成的工作,但它根本不起作用。
//defined in UnityEditor:
public Transform fooParent;
void blah () {
List<int> list = new List<int>();
for (int i = 0; i < fooParent.childCount; i++) {
Transform tempChild = Players.GetChild(i);
list.Add (tempChild.x);
}
}
关于你的答案为何以及如何运作的任何理论讨论都非常受欢迎:D(“教一个人如何捕鱼......”)
编辑:指定标题,复制文本到stackoverflow;从Unity Answers b.c中删除了链接。问题在这里得到了充分解决
答案 0 :(得分:1)
新守则:
public Transform fooParent;
public void blah () {
List<int> list = new List<int>();
for (int i = 0; i < fooParent.childCount; i++) {
Transform tempChild = fooParent.GetChild(i);
list.Add (tempChild.gameObject.GetComponent<ScriptName>().x);
}
}
这是因为.GetChild
返回一个变换,所以必须使用.gameObject
来获取附加了该变换的GameObject。从那里你可以使用.GetComponent<>()
在&lt;&gt;里面访问附加到该游戏对象的组件(脚本,变换等...)括号您输入要访问的组件的名称(在本例中为脚本)。现在可以控制脚本,您可以使用.variableName
访问其变量。最后,void blah
应为public void blah
。除非您当然希望它是私有或静态方法。