2013-07-02 3 views
6

Итак, я немного почитал форумы об AssetBundles и папке Resources в Unity 3D, и я не могу найти оптимальное решение для проблема, с которой я сталкиваюсь. Вот проблема:Unity 3D: папка Asset Bundles vs. Resources vs www.Texture

У меня есть программа, предназначенная для автономной работы, которая загружает «книги», полные изображений .png и .jpg. Страницы в настоящее время одинаковы при каждом запуске программы. В начале сцены для любой «книги» она загружает все эти изображения сразу, используя www.texture и путь. Однако я понимаю, что это, возможно, неэффективный метод доступа к вещам во время выполнения - это медленно! Это означает, что пользователь не может ничего делать в течение 5-20 секунд, пока сцена начинается, и загружаются изображения страниц книги (на не легендарных компьютерах). Итак, я не могу понять, какая из трех вещей будет самой быстрой:

1) Загрузка одного пакета активов в книгу (скажем, 20 текстур по 1 мб каждый).

2) Загрузка одного пакета активов на каждую страницу (по 1 мб).

3) Любой из первых двух параметров, но загруженный из папки ресурсов.

Какой из них будет быстрее и почему? Я понимаю, что пакеты активов упакованы по единице, но означает ли это, что текстуры внутри будут предварительно сжаты и проще в памяти во время загрузки? Папка ресурсов вызывает меньшее время загрузки? Что дает? Насколько я понимаю, папка ресурсов загружается в кеш - но это тот же кеш, который обычно использует автономный проигрыватель? Или это лишнее, неиспользуемое пространство? Я предполагаю, что другая проблема заключается в том, что я не уверен, какая разница между загрузкой вещей из памяти и хранением их в кеше.

Приветствия, люди ...

ответ

8

папки ресурсов в комплекте управляемых активов. Это означает, что они будут сжаты Unity, следуя настройкам, которые вы применяете в среде IDE. Поэтому они эффективны для загрузки во время выполнения. Вы можете адаптировать сжатие для каждой платформы, что должно еще больше оптимизировать производительность.

Мы делаем дорогостоящее использование Resources.Load(), чтобы вытаскивать активы, и это хорошо работает как на рабочем столе, так и на мобильных устройствах.

Существует также специальная папка, называемая StreamingAssets, которую вы можете использовать для размещения вложенных не управляемых активов. Здесь мы помещаем видео, которые хотим играть во время исполнения, но не хотим, чтобы Unity конвертировала их в коде ogg по умолчанию. На мобильных устройствах они воспроизводятся в родном видеоплеере. Вы также можете размещать изображения там, и загрузка их похожа на использование WWW-класса. Медленно, потому что Unity необходимо санировать и сжимать изображения во время загрузки.

Загрузка WWW происходит медленнее из-за накладных расходов на обрабатывающий актив, как указано выше. Но вы можете извлекать данные с сервера или из-за пределов приложения «песочница».

  • Загрузите только то, что вам нужно для отображения и реализации фонового процесса, чтобы получить дополнительный контент, когда пользователь занят, просматривая первые страницы каждой книги. Это позволит избежать блокировки пользовательского интерфейса слишком долго.
  • Оптимизируйте изображения, чтобы уменьшить размер файла. Используйте tinypng, если вам нужны прозрачные изображения или придерживайтесь сжатых JPG.
  • Попробуйте использовать мощность 2 изображений, где это возможно. Это должно немного ускорить обработку.

ath.

+0

Это отличный ответ о папке ресурсов, хотя я все еще немного смущен тем, как я могу использовать AssetBundles. Я попробую загрузить вещи из папки с ресурсами и посмотреть, как это происходит. – Catlard

+2

AssetBundles подобны папке «Ресурсы», загружаемой во время выполнения снаружи. Вы можете загрузить пакет из локального источника или сервера. После его загрузки вы можете получить доступ к своим активам так же, как и те, которые были включены во время компиляции в папках «Ресурсы». AssetsBundles отлично подходят для сокращения размера скомпилированного приложения и загрузки динамического контента (скорее всего с сервера) во время выполнения, чтобы убедиться, что у пользователя самые последние активы. –

4

Отличный ответ от Джерома о ресурсах. Для того, чтобы добавить некоторую дополнительную информацию для будущих поисков относительно AssetBundles, здесь два варианта:

Вашей игры слишком большой

У вас есть тонны текстур, скажем, и ваша игра IOS выше 100 мб - то есть Apple покажет предупреждение пользователям и не позволит им загружать их через сотовые. Ресурсы не помогут, потому что все в этой папке связано с приложением.

Решение: Переместите художественные работы, которые вам не нужны в первую очередь, в комплекты активов. Создавайте пакеты, загружайте их на сервер где-нибудь, а затем загружайте их во время выполнения по мере необходимости. Теперь ваша игра намного меньше и не будет страшных предупреждений.

Вам нужны разные версии произведений искусства для различных платформ

Альтернативный сценарий: вы разрабатываете для iPhone и IPad. По тем же причинам, что и выше, вы максимально сокращаете свое произведение, чтобы достигнуть предела 100 мб для iPhone. Но теперь игра выглядит ужасно на iPad. Что?

Решение: Вы создаете пакет активов с двумя вариантами. Один для телефонов с низким разрешением, и один для планшетов с высоким разрешением. В этом случае пакеты активов могут быть отправлены в игру или отправлены на сервер. Во время выполнения вы выбираете правильный вариант и загружаете из комплекта активов, получая соответствующие иллюстрации без необходимости, если/иначе повсюду.

С учетом всего сказанного, комплекты активов сложнее использовать, плохо документированы, а демонстрации Unity не работают должным образом в разы. Поэтому серьезно оцените, нужны ли они вам.