gpt4 book ai didi

c# - 如何等待协程回调执行?

转载 作者:行者123 更新时间:2023-12-03 06:21:08 25 4
gpt4 key购买 nike

我想等待StartCoroutine回调被执行。有人知道该怎么做吗?

public float getXXX() {
var result;
StartCoroutine(YYY((r) => result = r)); // how to wait this?
return result;
}

private IEnumerator YYY(System.Action<float> callback) {
LinkedList<float> list = new LinkedList<float>();
while(timeleft > 0) {
timeleft -= Time.deltaTime;
list.add(transform.position.magnitude);
yield return new WaitForSeconds (WAITSPAN);
}

callback(list.max());
yeild return true;
}

最佳答案

您不能也不应该尝试等待或让出协程函数从协程函数(getXXX 函数)返回。它将阻塞该非协程函数,直到该函数返回,从而阻止其他 Unity 脚本运行。

要在 getXXX 函数中等待协程函数 (YYY),您还必须将正在调用并等待的函数置于协程函数中。在本例中,这是YYY函数,因此它也应该是一个协程函数,然后您可以yield它:

public IEnumerator getXXX()
{
float result = 0f;
yield return StartCoroutine(YYY((r) => result = r)); // how to wait this?

//Use the result variable
Debug.Log(result);
}

或者

如果您不想使 getXXX 函数成为协程函数,则不要尝试在那里等待。您仍然可以使用 YYY 协程函数的结果,但不要尝试返回结果。只需使用它在该函数中执行您想做的任何操作即可:

public void doSomethingXXX()
{
StartCoroutine(YYY((result) =>
{
//Do something with the result variable
Debug.Log(result);

}));
}

使用协程的想法是能够在多个帧上执行某些操作。 void 函数只会在一帧内执行此操作。您不能在 void 或非 IEnumerator/coroutine 函数中让出/等待。

关于c# - 如何等待协程回调执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com