【发布时间】:2023-03-13 19:45:01
【问题描述】:
我正在尝试了解如何在 Unity 中编写 WWW 调用。根据http://docs.unity3d.com/ScriptReference/WWW.html这里的描述,我可以检查 isDone 属性,但在同一页面上的示例中,它没有尝试检查 isDone。
我的问题是,如果我拨打 WWW 电话并且需要几秒钟才能回复,游戏不会冻结吗?
我想正确的代码是这样的,但是是这样吗?
StartCoroutine(WaitForResponse(myWWWObject));
private IEnumerator WaitForResponse(WWW aRequest ) {
while ( ! aRequest.isDone )
yield return aRequest;
}
在 aRequest 完成之前游戏会冻结吗?还是真的是异步的?
【问题讨论】:
-
从示例中,我猜测
yield return www;行异步等待页面下载完成。 -
在该示例中,它只是等待 www 请求完成(等待发生在“yield return www;”行)。您还可以使用这个新的 webrequest 来获得更多控制:docs.unity3d.com/ScriptReference/…
-
如果返回的是 IEnumerator,它怎么知道它已经完成了......没有什么可以“测试”完成
-
看来我上面的代码可以正常工作,但它是矫枉过正的;但只是一点点。 IsDone 用于测试主线程上的 WWW 完成情况,而 yield 用于协程。 yield 会暂停线程,直到答案返回,无论是成功还是失败。因此,在协程中,循环将在协程中进行一次迭代。
标签: asynchronous unity3d