Всем привет!
Мы решили, что стоит рассказывать обо всем, что происходит у нас во время разработки игры Fast Fox 🙂 Лучше поздно чем никогда, поэтому мы начинаем вести дневник разработки и рассказывать о том чем мы занимаемся в данный момент. После релиза игры мы получили несколько отзывов пользователей, которые не смогли установить игру из-за нехватки места в памяти телефона. Это было особенно актуально для старых устройств с версией Android 2.3. Статистика установок это подтверждала – практически не было установок игры на старых версиях Android. К тому же и на относительно новых устройствах у игры были проблемы с производительностью.
После выпуска последнего обновления игра занимала на устройстве неразумно много места – больше 80 МБ.
При загрузке в Google Play нужно учитывать, что размер пакета приложения не должен превышать 50 МБ, иначе придется использовать технологию APK Expansion Files, чего очень не хотелось. Поняв, что с выпуском новых эпизодов размер будет только расти, мы решили взяться за эту проблему.
Что же занимает так много места? Проанализировав лог сборки в Unity мы нашли ответ. Ответ был на удивление прост и заранее предсказуем – наши ассеты, а именно – текстуры и звуки – съедают львиную долю места.
С оптимизацией звуков мы справились очень быстро – уменьшили качество звуков файлов, что дало выигрыш порядка 10 МБ.
Вторая проблема – с размером графических ассетов. В нашей игре мы не использовали текстурные атласы, что заметно сказалось как на размере занимаемом нашими графическими ресурсами, так и на производительности.
Чтобы долго не объяснять, что такое текстурные атласы и зачем они нужны, посмотрите это забавное видео:
https://www.codeandweb.com/what-is-a-sprite-sheet.
Ребята из codeandweb сделали отличный инструмент под названием TexturePacker для автоматизации создания текстурных атласов, к тому же с помощью плагина он очень легко интегрируется в Unity 🙂
Его то мы и решили использовать. Но всё оказалось не так просто…
После упаковки текстуры в текстурный атлас меняется ее имя. Поэтому для того, чтобы в игре использовалась текстура из атласа нужно было бы заменить ее во всех игровых объектах, где она использовалась, что было очень муторно и не рационально.
“Есть же префабы!” – скажете вы и будете абсолютно правы. Для тех, кто не знаком с этим понятием в Unity – префаб – это шаблон игрового объекта. Используя этот шаблон вы можете создать сколько угодно игровых объектов на сцене. Изменяя свойства префаба меняются и свойства всех игровых объектов, созданных по этому префабу (с определенными ограничениями).
Префабов гораздо меньше, чем игровых объектов и поэтому заменить текстуры в префабах было бы существенно проще. Но множество игровых объектов в нашей игре не были связаны с префабами.
“Надо привязать!” – решили мы и ринулись в бой. Было бы очень здорово иметь адекватную иерархию префабов, что в дальнейшем бы упростило нам добавление новых и изменение существующих сущностей в игре.
Не успев начать мы сразу же натолкнулись на проблему вложенных префабов, которой завалены все форумы Unity и Stackoverflow (http://stackoverflow.com/questions/18768013/what-is-a-nested-prefab).
Кратко эту проблему можно описать на примере:
У вас в игре есть префаб колеса и у есть префаб машины, который содержит в себе 4 префаба колеса. Вы решили изменить префаб колеса и сделать его квадратным. Логично было бы предположить, что в префабе машины колеса также станут квадратными. А нет, Unity думает не так, вам нужно будет сначала создать игровой объект по префабу машины, поменять в ней колеса на квадратные и применить эти изменения в префабе машины.
Многих как и нас такое поведение вгоняет в ступор. А разработчики Unity уже который год обещают решить эту проблему. (Интересно как живется тем, кто разрабатывает действительно объемные проекты на Unity?)
Поизучав эту проблему на форумах Unity и покопавшись в Asset Store, мы нашли решение – это плагин Prefab Evolution. Он изящно решает проблему вложенных префабов, а так же добавляет возможность гибкого наследования.
Сейчас мы заняты тем, что связываем игровые объекты с префабами и переводим их на использование Prefab Evolution. Следующий шаг – внедрить текстурные атласы и таким образом уменьшить размер игры и повысить производительность!
О результатах в следующем посте 🙂
Recent Comments