我想等待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 函数中让出/等待。