我知道这通常意味着某个地方存在无限循环,但是我将其范围缩小到此IEnumerator,因为当我删除它时,它可以正常工作,但是会立即生成所有敌人。这个想法是要算出该波需要多少个敌人,然后每达到0.5秒就产生1个敌人,而不是立即为该波产生所有敌人。
更新方法:
void Update()
{
Enemies = GameObject.FindGameObjectsWithTag("EndlessKnife");
NoOfEnemies = 0;
foreach (GameObject Enemy in Enemies)
{
NoOfEnemies++;
}
if (NoOfEnemies == 0)
{
waveNumber++;
StartingAmount = Mathf.RoundToInt(waveNumber + (Mathf.Pow(1.2f, waveNumber)));
for (int i = 0; i < StartingAmount;)
{
if (Limit == false)
{
SpawnEnemy();
i++;
Limit = true;
StartCoroutine(GradualSpawn());
}
}
}
}
IEnumerator:
IEnumerator GradualSpawn()
{
yield return new WaitForSeconds(0.5f);
Limit = false;
}
我使用相同的逻辑来限制我的武器的射速,所以不明白为什么它在这里坠毁,任何输入都是有用的:D
for循环意味着您希望所有敌人都在同一帧上生成(您不希望这样做),因为for循环将在int小于您的StartingAmount的同时继续执行。如果要在一段时间内生成敌人,只需使用if语句而不是for循环即可:
int i = 0;
if (i < StartingAmount) {
if (Limit == false) {
SpawnEnemy();
i++;
Limit = true;
StartCoroutine(GradualSpawn());
}
}
现在应该可以工作了:)