c# - IEnumerator 在使用 IEnumerator 每 0.5 秒生成一个敌人时不断崩溃

标签 c# unity-game-engine game-development ienumerator

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

相关文章:

c# - 如何从 RichTextBox 中获取显示的文本?

c# - 当我想完全按照没有添加 ISerializable 时它会做什么时,如何在具有 [Serializable] 的类上实现 ISerializable?

c# - 命名空间被编译器混淆

java - 如何将 '.jar'库文件导入Unity?

c# - 如何在 Unity AndroidJavaClass 中访问枚举

c# - 统一3D : Loading FBX dynamically using AssetBundle

unity-game-engine - Unity HDRP 地形上的阴影太暗

game-development - 如何实例化一个场景并让它只面向 x 或 z 方向?

python - 如何在 pygame 中生成多个敌人

ruby - Gosu渲染技术优化