首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么多个统一协同加速www图像加载?

为什么多个统一协同加速www图像加载?
EN

Stack Overflow用户
提问于 2017-07-17 20:28:53
回答 1查看 1.5K关注 0票数 1

我一天都在谷歌上搜索很多问题,但我似乎找不到适合我问题的答案,所以我希望有人能帮我。

我想在一个统一场景中显示几个图像流。我有几个带有加载脚本的GameObjects。

  • GameObject1与脚本Loader.cs (开始调用协同线)
  • GameObject2与脚本Loader.cs (开始调用协同线)
  • GameObject3与脚本Loader.cs (开始调用协同线)

并通过以下脚本中的协同线加载我的图像:

代码语言:javascript
复制
IEnumerator Load()
{
   Texture2D tex = new Texture2D(4, 4, TextureFormat.DXT1, false);
   while (true)
   {
      WWW www = new WWW(url);
      yield return www;                
      www.LoadImageIntoTexture(tex);
      img.texture = tex;
   }
}

(其中img.texture是我在场景中的图像,url是我正在加载的url )。

这对于加载映像很好,但是我注意到,一旦启动更多的协同工作,图像加载/流就会更快。为了澄清,如果我有一个图像流,它是在以一定的速度更新图像,但是如果我有,例如3个图像流(每个有一个加载的协同线)突然所有三个流加载图像比用一个流加载图像的速度快。

我试着在协同线的末尾添加一个yield return new WaitForFixedUpdate();,但是它没有帮助,而且我不知道如何在加载新图像时达到一个有规律的速度,独立于同一时间有多少流/协同线?我希望这是明确的,我的意思和任何帮助都是感激的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 22:00:56

启动多个协同器可以更快地更新映像,因为您所拥有的是在不同的时间从不同的线程下载映像。WWW API的本机部分是用线程实现的。注意,coroutine与Thread不相同。

coroutine与WWW API一起使用的目的是,在访问输出(映像).Basically之前,能够等待WWW请求完成,您将拥有3个永久运行的协同服务。当每个人都在下载图像时,另一个可能会将已经下载的图片上传到Texture2D

无论如何,这是而不是流图像的正确方式。WWW API 不能用于此目的。这对你来说可能很好,但这是一次很糟糕的攻击。

你有两个选择:

1.Use新联合的UnityWebRequest及其DownloadHandlerScript扩展。

2.Use C#标准HttpWebRequest API与Thread一起使用技术将结果发送到主线程。

无论您选择哪种选择,从jpeg读取的技术仍然是相同的。

1.Make连接到url

来自该流的2.Read

3.Search表示字节0xFF,后面跟着0xD8

4.When您可以找到字节0xFF0xD8,开始读取流并继续将它们存储到字节数组/列表中。

5.While读取jpeg流,继续搜索字节0xFF0xD9

6.When您可以找到字节0xFF0xD9,停止读取。

7.Your jpeg映像现在是从0xFF构造的字节数组,0xD8从步骤#4到0xFF0xD9的整个byte数组。

8.最后,使用Texture2D.LoadImage将字节数组加载到Texture2D中并显示在屏幕上。

9.Jump返回到步骤#3,并继续重复,因为除非服务器停机,否则流不会结束。

如果遇到问题,可以使用此答案生成的代码创建一个新的帖子。这里是一篇也能让你说出的文章。

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

https://stackoverflow.com/questions/45153140

复制
相关文章

相似问题

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