在剧本的顶部:
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。
答案 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
添加到列表中。