【问题标题】:IEnumerator keeps crashing unity when using it to spawn an enemy ever 0.5 secondsIEnumerator 在使用它每 0.5 秒产生一个敌人时会不断崩溃
【发布时间】:2020-04-30 12:03:56
【问题描述】:

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

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

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

现在应该可以了 :)

【讨论】:

  • 我可以确认这已经奏效了,我应该意识到这样一个简单的解决方案,非常感谢:D
  • 这不会导致每帧生成一个敌人(在 0.5 秒暂停后),还是我误解了这个问题?
  • @Jake 它每 x 秒生成一个敌人,直到达到该波所需的数量
  • 哦,我明白了,Limit 是一个标志
【解决方案2】:

你的问题是你卡在这里if (Limit == false)。您需要稍微重构代码,以便所有等待和循环都发生在您的协程中,否则您的程序将阻塞。

if (NoOfEnemies == 0){
    waveNumber++;
    StartingAmount = Mathf.RoundToInt(waveNumber + (Mathf.Pow(1.2f, waveNumber)));
    StartCoroutine(GradualSpawn(StartingAmount));
}

然后在你的协程中

IEnumerator GradualSpawn(int StartingAmount)
{
    for (int i = 0; i < StartingAmount; i++){
        SpawnEnemy();
        yield return new WaitForSeconds(0.5f);
    }
}

这应该每 0.5 秒产生一个敌人。
希望这会有所帮助

【讨论】:

  • 我只想补充一点,您的方法也同样有效,所以感谢您的意见:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多