第二个协同程序不工作Unity

时间:2018-06-01 23:33:36

标签: c# unity3d

我正在制作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个生命之后每次都会重生。

2 个答案:

答案 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
}