4 回答
TA贡献1816条经验 获得超4个赞
当玩家死亡时,您需要将 gameOver 设置为 True
您还需要添加逻辑以将 while 循环更改为 false 以退出 while 循环。
例如在 while 循环内设置gameOver = true
when并设置currentHealth == 0
while(gameOver == false)
TA贡献1886条经验 获得超2个赞
我认为问题可能是当您调用 StopCoroutine() 时,您并没有指示它停止协程的特定实例。相反,您需要存储对协程的引用并将其作为参数传递给您的 Stop。
IEnumerator wavecoroutine = SpawnWaves();
StartCoroutine(wavecoroutine);
...
StopCoroutine(wavecoroutine);
TA贡献1796条经验 获得超7个赞
ryeMoss 实际上有正确的答案。您不需要更改 while 循环的条件,而是需要确保将参考值传递给该StopCoroutine方法。您可以在文档中看到这正是他们正在做的事情。
问题是什么时候SpawnWaves调用它返回一个新IEnumerator的,当你试图阻止它时,这显然不是你想要的,哈哈。
Start只需在您的方法内部更改为
gameOver = false;
waves = SpawnWaves(); <-- or whatever you want to call it
StartCoroutine(waves); <-- using a reference
然后传递waves给StopCoroutine.
始终仔细阅读文档;在学习新的库、框架等时,他们是你最好的朋友。:)
TA贡献1785条经验 获得超8个赞
完全修复感谢@AlexG 的指导
void Start () {
gameOver = false;
StartCoroutine (SpawnWaves());
}
IEnumerator SpawnWaves()
{
yield return new WaitForSeconds(startWait);
while (gameOver != true)
{
for (int i = 0; i < hazardCount; i++)
{
if(gameOver)break;
GameObject enemy = enemies[Random.Range(0, enemies.Length)];
Instantiate(enemy, spawnPosition1, spawnRotation1);
Instantiate(enemy, spawnPosition2, spawnRotation2);
Instantiate(enemy, spawnPosition3, spawnRotation3);
Instantiate(enemy, spawnPosition4, spawnRotation4);
Instantiate(enemy, spawnPosition5, spawnRotation5);
Instantiate(enemy, spawnPosition6, spawnRotation6);
yield return new WaitForSeconds(spawnWait);
}
yield return new WaitForSeconds(waveWait);
enemies[0].GetComponent<EnemyBehviour>().currentHealth *= eenter code herenemyHealthMultiplier;
}
}
- 4 回答
- 0 关注
- 174 浏览
添加回答
举报