首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >第二个协程不是工作单位

第二个协程不是工作单位
EN

Stack Overflow用户
提问于 2018-06-02 07:33:36
回答 2查看 522关注 0票数 0

我正在制作2D游戏,想在玩家的所有生命耗尽后造成大约3秒的延迟。我试图在场景重新开始之前实现Coroutine方法,但它不起作用。我已经实现了协程方法,每当我的玩家从悬崖上坠落并重新回到它的位置时。它就像护身符一样起作用。

代码语言:javascript
复制
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次生命后,播放器都会重新启动

EN

回答 2

Stack Overflow用户

发布于 2018-06-02 13:18:45

第二个协程的问题是..

您错误地使用了"IEnumerable“而不是"IEnumerator",请将其更改为"IEnumerator”,它将正常工作。

票数 3
EN

Stack Overflow用户

发布于 2018-06-02 07:40:33

不应该在StartCoroutine("RestartScene1");之后调用SceneManager.LoadScene("demo2");

StartCoroutine("RestartScene1");你可以说这段代码是一个异步代码。它被调用,程序的执行继续进行(执行不会在这里等待)。在yielding之后,你应该在协程中调用你想要延迟的代码。

小例子:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50652136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档