循环遍历用于 AutoSpawn 的 Unity GameObjects 数组
Posted
技术标签:
【中文标题】循环遍历用于 AutoSpawn 的 Unity GameObjects 数组【英文标题】:Looping through array for Unity GameObjects for AutoSpawn 【发布时间】:2021-04-05 06:10:09 【问题描述】:我正在尝试执行以下操作。我有一个包含 2 个游戏对象的数组。我按照一些示例制作了一个用于自动生成它们的脚本,并根据我的喜好修改了脚本。(我快到了)。
问题是生成器只生成 1 个游戏对象然后停止。我很确定我在循环方面做错了,但我现在有 2 天时间,无法弄清楚。我想要的是让生成器生成第一个游戏对象 5 次,然后转到下一个游戏对象并再生成 5 次,我还从以前的帮助中添加了一个碰撞功能,以便生成的游戏对象不会在墙内生成,但是由于某种原因,它不能很好地工作。
我在 GameObjects 上有 2 个盒子碰撞器用于不同的工作,一个被触发并占用整个 GameObjects 的大小,另一个小一点作为碰撞器工作(未触发),有什么建议或帮助吗?这是我正在处理的代码。
public GameObject[] objblabla;
private GameObject selectedObject;
public int limit;
private float radius = 5f;
void Start()
StartCoroutine(SpawnObjects());
IEnumerator SpawnObjects()
foreach (GameObject selectedObject in objblabla)
while (limit != 0)
Vector3 freePos = GetFreePosition();
Instantiate(selectedObject, freePos, Quaternion.identity);
yield return new WaitForSeconds(5.0f);
limit--;
Vector3 GetFreePosition()
Vector3 position;
Collider[] collisions = new Collider[1];
do
position = new Vector3(Random.Range(35.0f, 950.0f), 10.0f, Random.Range(35.0f, 950.0f));
while (Physics.OverlapSphereNonAlloc(position, radius, collisions) > 0);
return position;
【问题讨论】:
【参考方案1】:我认为当您循环遍历 gameObjects 数组时,您正在做一些令人困惑的事情。
一个数组作为调用.Lenght
来检查他的大小的可能性,记住这一点你可以很容易地做到:
for(int i = 0; i < objblabla.Lenght; i++)
for(int j = 0; j < 5: j++)
Vector3 freePos = GetFreePosition();
Instantiate(selectedObject, freePos, Quaternion.identity);
这样,您将为每个数组生成 5 次对象。我建议不要使用 selectedObject:
objblabla[i];
在for循环中,您将按顺序调用对象,一次一个
【讨论】:
我想我之前尝试过,但没有成功,这就是我发布的原因。但让我再试一次并告诉结果。请回复。 放置一个数组大小的变量,然后声明具有该大小的游戏对象数组或使用数组的大小@Kostas 工作就像一个魅力。Ty 很多。当我尝试相同的时候,我现在记得它没有工作;因为我在 LateUpdate 中有代码。 当然,它不起作用!祝游戏好运:D @Kostas 真的,你是救生员.以上是关于循环遍历用于 AutoSpawn 的 Unity GameObjects 数组的主要内容,如果未能解决你的问题,请参考以下文章