Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在unity android中使用www类下载图像_Android_Unity3d - Fatal编程技术网

无法在unity android中使用www类下载图像

无法在unity android中使用www类下载图像,android,unity3d,Android,Unity3d,我正在尝试在我的unity项目android游戏中使用此代码下载图像 public static Texture2D userTexture=new Texture2D(64, 64, TextureFormat.DXT5, false); //TextureFormat must be DXT5 public static IEnumerator UserPictureCallback(){ Debug.Log("USerPicture called");

我正在尝试在我的unity项目android游戏中使用此代码下载图像

    public static Texture2D userTexture=new Texture2D(64, 64, TextureFormat.DXT5, false); //TextureFormat must be DXT5
    public static IEnumerator UserPictureCallback(){
        Debug.Log("USerPicture called");
        FbDebug.Log("USerPicture called");
        WWW url = new WWW("http://i1.wp.com/a0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png?resize=64%2C64");


        yield return url;
        //profilePic.renderer.material.mainTexture = textFb2;

        Debug.Log(url);
        url.LoadImageIntoTexture(userTexture);
        Debug.Log("Working");
    }
然后我尝试使用DrawTexture在GUI中绘制它

    GUI.DrawTexture(new Rect(5,0,50,50),FB.userTexture,ScaleMode.StretchToFill, false, 0.0f);

但是图像纹理没有被下载,或者至少它没有显示在GUI中。有人能帮我解决这个问题吗?

我最近也遇到了同样的问题。我在Unity中创建了一个可滚动的图像库,可以从web服务器实时下载图像。在iOS设备上,我很快就达到了内存限制(导致应用程序崩溃)。这是由于大量www对象留在内存中,从未被删除或释放。还有大量Texture2D对象泄漏。 主要的误解是将纹理2D视为自包含图像信息的对象变量。Texture2D只指向引用的资产,因此我们需要在分配给GUI对象之前创建一个资产。如果不创建一个,我们将覆盖项目中引用的资产,导致非常疯狂的行为。 这就是我在iOS上使用的代码,只需要使用最少的内存

    public void DownloadImage(string url)
    {   
        StartCoroutine(coDownloadImage(url));
    }

    IEnumerator coDownloadImage(string imageUrl)
    {

        WWW www = new WWW( imageUrl );

        yield return www;

        thumbnail.mainTexture = new Texture2D(www.texture.width, www.texture.height, TextureFormat.DXT1, false);
        www.LoadImageIntoTexture(thumbnail.mainTexture as Texture2D);
        www.Dispose();
        www = null;
    }
简短评论: 您将收到一个将从中下载图像的url。 启动管理下载的协同程序 在本地范围中创建www对象 等待下载完成 使用参数创建一个新的Texture2D对象/资源,并指定给最终对象mainTexture或您想要的内容 使用“www.LoadImageIntoTexture()”函数在创建的资源中复制图像(这是基本部分) Dispose并将www对象设置为null,以防止内存泄漏或孤立

希望它能帮助那些面临同样问题的人

一个有趣的讲座是在这个网站上,他们实现了一个WebImageCache系统,以避免多次重新下载相同的图像


您正在使用Start例程调用UserPictureCallback吗?你有没有收到“正常”的调试信息?您还可以使用isDone etc属性来了解更多信息:尝试了这段代码后,它工作得很好。所以一定有什么东西你没给我们看。你能展示你剩下的代码是什么样子的,以及你是如何调用它的吗?唯一的“问题”是DXT5显示的图像变成粉红色,而不是RGBA32显示的正确绿色。嘿@Bart我尝试使用RGBA32格式,但drawtexture在这种情况下没有显示任何内容。但当我尝试制作RGB24时,我得到了这张像素图片(我正在分享截图的链接)。所以现在我不确定这是格式问题还是图像本身没有被下载。请看下面的链接,并帮助我解决这个疑问。如果格式不正确,请告诉我要使用的正确纹理@正如您在上面的代码中看到的,我已经编写了与您提到的unity脚本手册链接中给出的完全相同的收益率。不,我不认为我在调试中“工作”。但是我也怀疑我是否能够阅读所有的调试,因为Unity 4.2:P我认为所有的调试都以详细的形式打印在Unity标签中。如果我错了,请纠正我。