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);
}
}
这是我使用的教程:
您已经编写了一个 Unity 协程 GameLoop
,其中有一个 while 循环。
引擎将进入 while 循环并且永远不会离开,因为没有任何设置 LoopShouldEnd
到 true
,或跳出循环。
通常,您可以通过在 while 循环 内部 中从协程 (yield return null
) 产生,并将 LoopShouldEnd
设置为 false
在你希望它停止的帧上,或者在你在该帧内完成生成后结束 while 循环(你可以 break
立即结束它)
当 yield 在 while 循环之外时,它只会在 while 循环结束后发生,而这永远不会发生,因此没有其他代码运行并且编辑器冻结。
一些关于协程的有用文档:
我是 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);
}
}
这是我使用的教程:
您已经编写了一个 Unity 协程 GameLoop
,其中有一个 while 循环。
引擎将进入 while 循环并且永远不会离开,因为没有任何设置 LoopShouldEnd
到 true
,或跳出循环。
通常,您可以通过在 while 循环 内部 中从协程 (yield return null
) 产生,并将 LoopShouldEnd
设置为 false
在你希望它停止的帧上,或者在你在该帧内完成生成后结束 while 循环(你可以 break
立即结束它)
当 yield 在 while 循环之外时,它只会在 while 循环结束后发生,而这永远不会发生,因此没有其他代码运行并且编辑器冻结。
一些关于协程的有用文档: