[IEnumerator在每0.5秒使用它生成敌人时会保持崩溃的统一性

问题描述 投票:0回答:1

我知道这通常意味着某个地方存在无限循环,但是我将其范围缩小到此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

c# unity3d game-development ienumerator
1个回答
1
投票

for循环意味着您希望所有敌人都在同一帧上生成(您不希望这样做),因为for循环将在int小于您的StartingAmount的同时继续执行。如果要在一段时间内生成敌人,只需使用if语句而不是for循环即可:

int i = 0;
if (i < StartingAmount) {
    if (Limit == false) {
         SpawnEnemy();
         i++;
         Limit = true;
         StartCoroutine(GradualSpawn());
    }
}

现在应该可以工作了:)

© www.soinside.com 2019 - 2024. All rights reserved.