我一天都在谷歌上搜索很多问题,但我似乎找不到适合我问题的答案,所以我希望有人能帮我。
我想在一个统一场景中显示几个图像流。我有几个带有加载脚本的GameObjects。
并通过以下脚本中的协同线加载我的图像:
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();,但是它没有帮助,而且我不知道如何在加载新图像时达到一个有规律的速度,独立于同一时间有多少流/协同线?我希望这是明确的,我的意思和任何帮助都是感激的!
发布于 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您可以找到字节0xFF和0xD8,开始读取流并继续将它们存储到字节数组/列表中。
5.While读取jpeg流,继续搜索字节0xFF和0xD9。
6.When您可以找到字节0xFF和0xD9,停止读取。
7.Your jpeg映像现在是从0xFF构造的字节数组,0xD8从步骤#4到0xFF、0xD9的整个byte数组。
8.最后,使用Texture2D.LoadImage将字节数组加载到Texture2D中并显示在屏幕上。
9.Jump返回到步骤#3,并继续重复,因为除非服务器停机,否则流不会结束。
如果遇到问题,可以使用此答案生成的代码创建一个新的帖子。这里是一篇也能让你说出的文章。
https://stackoverflow.com/questions/45153140
复制相似问题