无法使用统一android中的www类下载图像

时间:2013-11-23 15:46:38

标签: android unity3d

我正在尝试使用此代码在我的统一项目中下载一个图像我的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中显示。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。我在Unity中创建了一个可滚动的图库,其中图像是从Web服务器实时下载的。在iOS设备上,我的内存限制非常快(导致应用程序崩溃)。这是由于大量的www对象留在内存中而从未删除或释放。此外,还有大量的Texture2D对象泄漏。 主要的误解是将Texture2D视为自包含图像信息的对象的变量。 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;
    }

简短评论: 您收到一个网址,您将从中下载图像。 启动管理下载的协同程序 在本地范围内创建www对象 产量等待下载完成 使用参数创建一个新的Texture2D对象/资产,并将其分配给最终对象mainTexture或您想要什么 使用" www.LoadImageIntoTexture()"函数复制创建的资产内的图像(这是基本部分) 处理并设置为null对象以防止内存泄漏或孤立

希望能帮助谁解决同样的问题。

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

http://studiofive27.com/index.php/unity-cached-web-images/