уменьшить размер сборки Unity WebGl с помощью Asset Bundles

У нас есть приложение Unity, которое содержит более 700 изображений, прямо сейчас размер сборки является для нас реальной проблемой, поэтому мы изучаем, как уменьшить размер сборки.

Мы хотели загрузить изображения с нашего сервера, поэтому мы создали небольшой скрипт, который загружает изображения:

public IEnumerator LoadImages(List<string> imageNames, System.Action<int> callback) {
  int downloadedImages = 0;
  foreach (string imageName in imageNames) {
    string imageUrl = spriteNamesAndUrls[imageName];
    var www = new WWW(imageUrl);
    yield return www;
    Texture2D texture = new Texture2D(1, 1);
    www.LoadImageIntoTexture(texture);
    Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one/2);
    sprites.Add(imageName, sprite);
    downloadedImages += 1;
  }
  callback(downloadedImages);
}

(я упростил код для этого вопроса)

Проблема с этим скриптом в том, что я вынужден конвертировать сотни изображений в спрайты / текстуры, и это ненужная проблема, с которой нужно иметь дело, учитывая, что нам никогда не понадобится рендерить более 20 спрайтов в одной сцене. .

Итак, теперь я изучаю использование пакетов Asset, которые, кажется, являются встроенным решением.

У меня вопрос,

Является ли Asset Bundle хорошим решением для уменьшения размера моей сборки WebGl по сравнению со сценарием, приведенным выше?

примите во внимание, что у меня есть папка с активами с более чем 700 изображениями (всего 19 МБ)


person Jorge Junior Arteaga Carvalho    schedule 17.05.2017    source источник
comment
Наборы активов хороши, если вы хотите уменьшить начальный размер игры. Кроме того, это позволит вам обновлять содержимое вашего изображения, не беспокоясь о перекомпиляции и обновлении вашей игры (игровой магазин или платформа для развертывания, которую вы используете).   -  person Muhammad Faizan Khan    schedule 12.03.2019


Ответы (2)


приложение просто вылетает из-за проблем с памятью, вероятно, из-за сотен HTTP-вызовов.

Это не имеет ничего общего с размером WebGL. Если присмотреться, в настройках сборки / плеера webGL есть параметр размера памяти. где вы можете увеличить это, чтобы решить проблему.

введите описание изображения здесь

Однако вы должны быть осторожны при установке размера памяти, если он слишком велик, браузер отклонит запрошенную память и не сможет загрузить плеер.

Подробнее об этом читайте здесь: Рекомендации по использованию памяти при ориентации на WebGL

Проблема не в HTTP-вызовах, проблема в большом количестве изображений, загружаемых в память браузера. Если вы используете пакет ресурсов, вы столкнетесь с той же проблемой, потому что вы будете загружать все эти изображения в память браузера, создавая спрайты или что-то еще.

Надеюсь это поможет.

person Umair M    schedule 17.05.2017
comment
Привет @Umair, я уже пытался увеличить размер памяти раньше, но безуспешно. Так или иначе, наша основная проблема - это размер сборки. Думаю, я не совсем понял, я просто отредактировал вопрос. Спасибо за ответ. - person Jorge Junior Arteaga Carvalho; 18.05.2017

Является ли Asset Bundle хорошим решением для уменьшения размера моей сборки WebGl по сравнению со сценарием, приведенным выше?

Да, Asset Bundle - гораздо более мощный инструмент. Вы можете загружать и кэшировать любые типы ресурсов, включая полные сцены.

Вы можете узнать больше о вариантах использования Assets Bundle здесь:

https://unity3d.com/es/learn/tutorials/topics/scripting/assetbundles-and-assetbundle-manager

Некоторые лучшие практики при его использовании:

https://unity3d.com/es/learn/tutorials/topics/best-practices/assetbundle-usage-patterns

person Oswald Moreno    schedule 11.07.2018