我正在制作2D游戏,并且想要在玩家的所有生命耗尽后导致大约3秒的延迟。我试图在场景重新开始之前实现Coroutine方法,但它不起作用。 每次我的玩家跌落悬崖并重新回到原位时,我已经实施了Coroutine方法。它就像一个魅力。
public void Respawner()
{
StartCoroutine("RespawnCoroutine");
}
// Coroutine Delay of 2 sec for each time player Respawn
public IEnumerator RespawnCoroutine()
{
classobj.gameObject.SetActive(false);
yield return new WaitForSeconds(respawnDelaySec);
classobj.transform.position = classobj.respawnPoint;
classobj.gameObject.SetActive(true);
}
public void ReduceLives()
{
if (lives <= 3 && lives >= 2)
{
lives--;
live_text.text = "Remaining Live " + lives;
}
else
{
StartCoroutine("RestartScene1");
}
}
public IEnumerable RestartScene1()
{
yield return new WaitForSeconds(RestartSceneDelaySec);
SceneManager.LoadScene("demo2");
}
此处控制台窗口没有错误,SceneManager.LoadScene("demo2")
;永远不会被召唤,玩家在我死后和剩余1个生命之后每次都会重生。
答案 0 :(得分:3)
你的第二个协程的问题是......
您错误地使用了“IEnumerable”而不是“IEnumerator”,将其更改为“IEnumerator”并且它将起作用..
答案 1 :(得分:0)
您不应在SceneManager.LoadScene("demo2");
之后致电StartCoroutine("RestartScene1");
。
StartCoroutine("RestartScene1");
这个代码可以说是异步代码。它被调用,程序的执行继续前进(执行不在这里等待)。你应该在yield
之后调用你想要在Coroutine中延迟的代码。
小例子:
public void SomeFunction()
{
StartCoroutine("RestartScene1");
// The code here will **not** be delayed
}
public IEnumerable RestartScene1()
{
yield return new WaitForSeconds(RestartSceneDelaySec);
// The code here will be delayed
}