首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AsyncOperation和不使用AsyncOperation来显示UnityWebRequest的进展有什么区别?

使用AsyncOperation和不使用AsyncOperation来显示UnityWebRequest的进展有什么区别?
EN

Stack Overflow用户
提问于 2022-04-22 01:48:33
回答 1查看 466关注 0票数 0

我编写了一个脚本,它简单地使用UnityWebRequest下载一个文本文件。(我将文本大小设置为50 MB,以查看有意义的进展。)

代码语言:javascript
运行
复制
private IEnumerator GetRequest(Uri uri)
{
  using var unityWebRequest = UnityWebRequest.Get(uri);
  var operation = unityWebRequest.SendWebRequest();

  while (!operation.isDone)
  {
    progressText.text = $"Progress : {unityWebRequest.downloadProgress * 100:0.0}%";
    yield return null;
  }
}

上面的代码显示了所需的结果。

然后我开始好奇一个问题。因此,我修改了代码,使其不使用UnityWebRequestAsyncOperation变量。

代码语言:javascript
运行
复制
private IEnumerator GetRequest(Uri uri)
{
  using var unityWebRequest = UnityWebRequest.Get(uri);
  unityWebRequest.SendWebRequest(); // Edit here

  while (!unityWebRequest.isDone) // Edit here
  {
    progressText.text = $"Progress : {unityWebRequest.downloadProgress * 100:0.0}%";
    yield return null;
  }
}

但奇怪的是,它的工作原理是一样的。

为了解决这个问题,我查找了UnityWebRequest.isDoneUnityWebRequestAsyncOperation.isDone之间的区别。

https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest-isDone.html https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequestAsyncOperation.html

即使在阅读了以上两篇文章之后,我也不太明白。这两种情况之间有什么区别吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-22 11:43:49

异步操作运行在一个单独的线程上,因此,不妨碍游戏的正常流程。假设您正在从您的游戏中从互联网下载一个视频,这是100 MB大。如果您不使用异步操作,游戏实际上会等到下载完成(您可能会认为它冻结)。当下载诸如文本文件或访问网站之类的小东西时,不使用异步方法是可以的,但我建议使用异步方法来避免阻塞主线程,以防出现问题(比如,由于任何原因,在线连接需要更长的时间)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71962603

复制
相关文章

相似问题

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