我知道这通常意味着某处存在无限循环,但是我已将其范围缩小到这个 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 i 小于您的 StartingAmount 时继续执行。如果你想在一段时间内产生敌人,只需使用 if 语句而不是 for 循环:
int i = 0;
if (i < StartingAmount) {
if (Limit == false) {
SpawnEnemy();
i++;
Limit = true;
StartCoroutine(GradualSpawn());
}
}
现在应该可以了:)
关于c# - IEnumerator 在使用 IEnumerator 每 0.5 秒生成一个敌人时不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61522955/