首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何只在协同线完成后才继续该功能?

如何只在协同线完成后才继续该功能?
EN

Stack Overflow用户
提问于 2019-02-06 17:08:47
回答 2查看 1.5K关注 0票数 0
代码语言:javascript
复制
void Generate()
{
    StartCoroutine(FallDelayCoroutine());
    print("time3- " + Time.time);
}

IEnumerator FallDelayCoroutine()
{     
    print("time1- "+ Time.time);
    yield return new WaitForSeconds(3f);
    print("time2- " + Time.time);
}

输出:

时间1-0 时间3-0 时间2- 3.0146

我想要的输出是:

时间1-0 时间2-3 时间3-3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-06 17:38:31

https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html的文档中似乎有一个与您所要做的几乎完全相同的示例:

代码语言:javascript
复制
IEnumerator Start()
{
    // - After 0 seconds, prints "Starting 0.0"
    // - After 2 seconds, prints "WaitAndPrint 2.0"
    // - After 2 seconds, prints "Done 2.0"
    print("Starting " + Time.time);

    // Start function WaitAndPrint as a coroutine. And wait until it is completed.
    // the same as yield WaitAndPrint(2.0);
    yield return StartCoroutine(WaitAndPrint(2.0F));
    print("Done " + Time.time);
}

// suspend execution for waitTime seconds
IEnumerator WaitAndPrint(float waitTime)
{
    yield return new WaitForSeconds(waitTime);
    print("WaitAndPrint " + Time.time);
}

关键似乎是他们的Start例程返回IEnumerator,然后使用yield return StartCoroutine(WaitAndPrint(2.0F));强制它在继续之前等待该方法。

所以对你来说等价的是:

代码语言:javascript
复制
IEnumerator Generate()
{
    yield return StartCoroutine(FallDelayCoroutine());
    print("time3- " + Time.time);
}
票数 3
EN

Stack Overflow用户

发布于 2019-02-06 21:07:13

作为替代other answer,使用两个协同服务,您还可以添加一个回调,如。

代码语言:javascript
复制
IEnumerator FallDelayCoroutine(Action whenDone)
{     
    print("time1- "+ Time.time);
    yield return new WaitForSeconds(3f);
    print("time2- " + Time.time);

    whenDone?.Invoke();
}

并调用它,例如使用lambda表达式

代码语言:javascript
复制
void Generate()
{
    StartCoroutine(FallDelayCoroutine(() => {
        print("time3- " + Time.time);
    }));  
}

或者用一种方法

代码语言:javascript
复制
void Generate()
{
    StartCoroutine(FallDelayCoroutine(OnFallDelayDone));  
}

private void OnFallDelayDone()
{
    print("time3- " + Time.time);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54558982

复制
相关文章

相似问题

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