0

我目前在 Unity 上从事一个 2D 项目(适用于手机/平板电脑),我使用 下载一些重磅图片UnityWebRequestTexture.GetTexture(url),然后使用File.WriteAllBytes(filePath, webRequest.downloadHandler.data).

在项目的后期,我需要在 RawImage 元素上显示下载的图片。为了避免阻塞应用程序,我通过 FileStream 在单独的线程上读取字节,效果很好。

但是当我(从主线程)调用时((Texture2D) myRawImage.texture).LoadImage(loadedBytes),我的 Profiler 显示出一个巨大的峰值,如果大多数设备都能正确处理它,那么在 iPad Mini 上我经常会在此时收到 MemoryWarning。这在重复时会导致应用程序被 iOS 强制关闭。

有关信息,下载图像的大小取决于请求它的设备。我们最初打算在 iPad Mini 上以这种方式显示 2048x1536 图片,但我们在每个显示器上都收到了 MemoryWarning。我们现在使用 750x1334,但我们仍然不时收到 MemoryWarning。

那么我的问题是:有没有更好的方法来执行“LoadImage”步骤?我相信从byte[]to的转换Texture2D是我的记忆问题所在,但我没有找到任何解决方法。

或者最终:有没有更好的方法来下载/存储图像?如果图像从一开始就在应用程序的资源中,那么在同一设备上显示它似乎没有任何问题。也许有一种方法可以下载纹理,同时应用构建应用程序时资产接收的相同压缩算法?

4

1 回答 1

0

在加载纹理后使用Texture2D.Compress()可将纹理压缩至少 90%。

参考

于 2021-06-25T14:16:35.640 回答