从另一个转换子的脚本中获取公共数据成员

时间:2015-07-03 20:02:37

标签: c# unity3d

我有一个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中删除了链接。问题在这里得到了充分解决

1 个答案:

答案 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。除非您当然希望它是私有或静态方法。