如何在游戏对象中获取数组或列出所有子游戏对象?

时间:2016-09-30 09:52:36

标签: c# unity3d

在剧本的顶部:

public CameraControl cameraControl;
public Object birdPrefab;
public Transform birdParent;
private Transform cameraObj;
public Transform[] instancePoints;
public int _birdscount;
private Settings res;

然后在这个函数中

private GameObject InstantiateBird( Vector3 position, Quaternion rotation, Boid.Settings boidSettings )
  {
    var obj = (GameObject)Instantiate( birdPrefab, position, rotation );
    var boid = obj.GetComponent<Boid>();

    obj.transform.parent = birdParent;
    boid.SettingsRef = boidSettings;
    boid.DebugSettingsRef = settings.debugSettings;

    return obj;
  }

然后在我希望得到所有孩子的功能中:

int prevBirdCount;
    IEnumerator _WatchBirdCount()
    {
        prevBirdCount = _birdscount;

        while(true)
        {
            if(_birdscount != prevBirdCount)
            {
                prevBirdCount = _birdscount;
                //Do something
                foreach (Transform child in birdPrefab)
                {
                    //child is your child transform
                }
                InstantiateBirds();
            }
            yield return 0; //Wait a frame before checking again
            {
            }
        }
    }

但是foreach错了:foreach(在birdPrefab变换孩子)

这是一个屏幕截图,显示游戏运行时的层次结构和右侧主摄像头的检查员。

你可以在BirdsParent下的Hierarchy中看到我希望在List中获取所有HumanBirdPrefab(Clone),然后用它们做一些事情。

在检查器中,您可以在主要(脚本)中看到Bird Prefab和Bird Parent。

Screenshot

2 个答案:

答案 0 :(得分:2)

现在我错了,但在那个foreach中,你不能使用gameObject,你需要使用变换,所以要么

foreach (Transform child in birdPrefab.transform){}

或者如果birdParent是birdPrefab的变换,请执行此操作

foreach (Transform child in birdParent){}

此错误消息很有用,应该已添加到问题中:Assets \ Scripts \ Main.cs(5,5):错误CS1579:foreach语句无法对“UnityEngine.Object”类型的变量进行操作,因为“UnityEngine”。 Object'不包含'GetEnumerator'的公共定义(CS1579)(Assembly-CSharp)

答案 1 :(得分:0)

你在foreach内无所作为:里面只有一个评论。您应该在每次迭代时将child.gameObject添加到列表中。