
"Когда до презентации продукта оставалось всего несколько часов, и были добавлены все недостающие ассеты, выяснилось, что памяти то в устройстве не хватает."
В этой статье описан простой вариант управления подгруженных в память ресурсов, которые можно достаточно быстро внедрить. Идея для статьи была взята из опыта разработки XR приложения MR Diorama и не освещает каких-то инновационных открытий.
Подгрузка ресурсов в Unity работает примерно следующим способ: при загрузке сцены прогружаются все ресурсы в сцене, в том числе для неактивных объектов, затем подгружаются ресурсы для всех префабов, на которые есть ссылки, и ресурсы для всех префабов, на которые ссылаются уже подгруженные префабы. iPad 2016 года предлагает 2Гб оперативной памяти, и как же уместить в этом объеме что-нибудь детализированное и в больших количествах? Решение всего одно - разделять ресурсы и подгружать при необходимости, а способов несколько:
AssetBundles - это рекомендованный командой Unity способ раздилить ресурсы и использовать их по мере востребования.
Resource - Нерекомендованный способ, при котором ресурсы хранятся в папке Resource и подгружаются\выгружаются вручную.
Scene - Использование сцен как контейнеров для набора ассетов.
В моем случае проблема с оперативной памятью пришла резко и времени на какое-то переделывание почти не было, поэтому был выбран путь через сцены, т.к. AssetBundles предполагают заранее заготовленную базу для работы с ними, а Resource - не надежная из-за поиска по названию, ну и так же в этих случаях необходимо вручную подгружать и выгружать ресурсы.
И так, реализация крайне простая, в моем случае при наведении камеры устройства на разные AR маркеры ожидается разное поведение и UI, поэтому было принято решение на каждый маркер создать по сцене, в которой будет и UI и префабы с необходимым материалом, при сканировании маркера - нужная сцена подгружалась, а старая, если такая есть, выгружалась, освобождая память. Так же для позиционирования объектов в подгруженных сценах им передавалась информация о текущем положении проекции маркера в виртуальном пространстве.
После чего iPad стал справляться с этим приложением, и удачно подгружал и выгружал ресурсы:

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