Unity - Texture2D.Loadimage, приводящий к MemoryWarning

В настоящее время я работаю над 2D-проектом для Unity (для мобильных телефонов / планшетов), где я загружаю несколько тяжелых картинок, используя UnityWebRequestTexture.GetTexture(url), который я затем храню с помощью File.WriteAllBytes(filePath, webRequest.downloadHandler.data),

Позже в проекте мне нужно показать загруженную картинку в элементе RawImage. Чтобы избежать блокировки приложения, я читаю байты через FileStream в отдельном потоке, который работает хорошо.

Но когда я звоню (из основного потока) ((Texture2D) myRawImage.texture).LoadImage(loadedBytes)Мой Профилировщик показывает огромный пик, и если большинство устройств справляются с этим правильно, на iPad Mini я часто получаю предупреждение о предупреждении в этот момент. Что, при повторении, приводит к тому, что приложение принудительно закрывается iOS.

Для информации размер загружаемого изображения зависит от запрашивающего его устройства. Изначально мы намеревались отображать картинки 2048x1536 таким образом на iPad Mini, но на каждом дисплее у нас появлялось предупреждение о состоянии памяти. Сейчас мы используем 750x1334, но время от времени получаем MemoryWarning.

Мой вопрос: есть ли лучший способ сделать шаг "LoadImage"? Я считаю, что преобразование из byte[] в Texture2D вот где моя проблема с памятью, но я не нашел обходного пути к этому.

Или в конечном итоге: есть ли лучший способ загрузить / сохранить изображение? Если изображение было в ресурсах приложения с самого начала, у меня нет проблем с отображением его на том же устройстве. Может быть, есть способ загрузить текстуру, применяя тот же алгоритм сжатия, который получают ресурсы при создании приложения?

1 ответ

С использованием Texture2D.Compress() после загрузки текстура сжимает текстуру не менее чем на 90%.

Справка

Другие вопросы по тегам