我是联合和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);
}
}
下面是我使用过的教程:
发布于 2022-05-21 01:12:03
您已经编写了一个Unity GameLoop
,其中包含一个while循环。
引擎将进入while循环,并且永远不会离开,因为没有什么可以将LoopShouldEnd
设置为true
,也不会中断循环。
通常,您可以通过在while循环中从coroutine (yield return null
)生成,并在您希望它停止的帧上将LoopShouldEnd
设置为false
,或者在完成在该帧内生成时结束while循环(您可以break
立即结束它)来解决这个问题。
当产生的结果在while循环之外时,只有在while循环完成之后才会发生,这是绝对不会的,因此没有其他代码运行,编辑器冻结。
关于协同工作的一些有用的文件:
https://stackoverflow.com/questions/72328135
复制相似问题