Unity 冻结-(Unity 新手)

Unity Freezes-(Unity newbie)

我是 Unity 和 C# 的新手,非常感谢您的帮助。 我正在尝试制作塔防游戏,在教程的帮助下,但在我的游戏循环下它似乎是一个问题,每次我使用 While 时它都会冻结。我注意到的另一件事是 EnemyIDsToSummon.Count 一直是 0。 在这里你可以看到我的 GameLoop:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameLoopManager : MonoBehaviour
{
    private static Queue<int> EnemyIDsToSummon;
    public bool LoopShouldEnd;
   private void Start()
    {
        EnemyIDsToSummon= new Queue<int>();
        EntitySummoner.Init();

        StartCoroutine(GameLoop());
        InvokeRepeating("SummonTest", 0f, 1f);
    }
void SummonTest(){
    EnqueueEnemyIDToSummon(1);
}
  IEnumerator GameLoop(){

      while(LoopShouldEnd==false){
        //Spawn Enemies
        if(EnemyIDsToSummon.Count>0)
        {
            for(int i=0;i<EnemyIDsToSummon.Count;i++){
               EntitySummoner.SummonEnemy(EnemyIDsToSummon.Dequeue()); 
            }
        }
        //Spawn Towers
        //Move Enemies
        //Tick Towers
        //Apply Effects
        //Damge Enemies
        //Remove Enemies 
        // remove Towers

         
      }
       yield return null;
  }
  public static void EnqueueEnemyIDToSummon(int ID){
      
      EnemyIDsToSummon.Enqueue(ID);
   
  }
}

这是我使用的教程:

https://www.youtube.com/watch?v=-Pj5o5I_Wl4&t=1263s

您已经编写了一个 Unity 协程 GameLoop,其中有一个 while 循环。

引擎将进入 while 循环并且永远不会离开,因为没有任何设置 LoopShouldEndtrue,或跳出循环。

通常,您可以通过在 while 循环 内部 中从协程 (yield return null) 产生,并将 LoopShouldEnd 设置为 false 在你希望它停止的帧上,或者在你在该帧内完成生成后结束 while 循环(你可以 break 立即结束它)

当 yield 在 while 循环之外时,它只会在 while 循环结束后发生,而这永远不会发生,因此没有其他代码运行并且编辑器冻结。

一些关于协程的有用文档:

https://docs.unity3d.com/Manual/Coroutines.html