С вас как обычно 🔥 если хотите продолжения этой темы:)
#разработка_на_практике
Я думаю многие знают про существования пакета Addressables. Он выступает в роли замены стандартной Resources системы в юнити (которая хоть и проста в использовании, но довольно ограничена в своих возможностях).
🧐 Однако если у меня спрашивают что-то про Addressables, то обычно только в контексте того, что этот пакет позволяет подгружать контент для игры из облака. Конечно такая возможность впечатляет, но по факту - это скорее приятный бонус, чем главная причина использования и как будто многие упускают другие преимущества этой системы
❓Начнем с базы - чем вообще плоха стандартная ресурсная система?
👉 Всё из папки ресурсов попадает в билд игры, причем нужно оно или нет - неважно. Это неоправданно увеличивает вес игры и утяжеляет старт приложения
👉 Эта система очень плохо позволяет контролировать потребление оперативной памяти в игре и отслеживать что щас загружено в память, а что нет
👉 Нет никакого удобного способа подгружать ассеты и в целом работать с ними. Единственная возможность - прямые пути до ассетов (даже ключей нет!)
👉 И некоторые другие более мелкие проблемы, не буду даже нагружать вас
✨ Пакет Addressables как раз закрывает эти проблемы и дает даже больше:
👉 Память полностью под нашим контролем. Загрузили ассет -> попользовались -> выгрузили, при этом все зависимости автоматически подгружаются и выгружаются тоже
👉 Ключи вместо пути. Мы задаем ассету явный ключ и дальше можем таскать его как хотим по всему проекту
👉 Удобная асинхронность из коробки. Все операции асинхронные и удобно организованы
👉 Лейблы и другие приколюхи. Можно грузить и выгружать ассеты пачками по тем или иным категориям. Условно загрузить все конфиги, или всё окружение для боя. Это очень удобно встраивается в процесс игры
👉 Local или Remote - можем удобно выбирать какие ассеты будут лежать на облаке и грузиться по запросу (а значит и обновляться без пересборки билда), а какие будут зашиваться в билд.
И это еще не все плюшки
Т.е. на самом деле Addressables решает очень много проблем возникающих при создании средне-больших проектов
😈 Но и порог входа у такого инструмента выше. Нужно и асинхронность нормально знать, разные вспомогательные сервисы писать, и в целом с самим пакетом еще разбираться. Однако если вы уже плотно занимаетесь разработкой игр, то это того стоит
🖥 Какие сервисы мы обычно заводим и что я могу вам также посоветовать продумать на старте
Напрямую
Addressables.* по всему коду конечно дергать не стоит - всё заворачивается в сервисы:👉 IAssetsLoader - единая точка загрузки ассетов. Тут весь функционал по загрузке/выгрузке ассетов, прогреву ассетов по лейблам, внутренний подсчет ссылок, полный релиз ассетов и так далее
👉 AddressablesUpdateService - инициализация пакета, проверка обновлений, скачивание ассетов при необходимости, очистка кэша и тд
👉 Загрузчик сцен на аддрессейблах - сцены обычно делаем тоже адресуемые, в сочетании с остальным функционалом это позволяет прям максимально эффективно работать с контентом и памятью
👉 Загрузчик конфигов - все конфиги которые реализованы на scriptable objects также идут в addressables и подменяются обычно из облака (чтобы была возможность быстро что-то перенастроить по балансу и тп)
👉 Пулы и фабрики игровых объектов - обертки поверх
IAssetsLoader.Т.е. с этих пунктов можно начать разбираться с системой и оптимизировать работу с ассетами и памятью в игре
👨💻А если что-то из этого интересно подробнее посмотреть по устройству, то пишите в комменты обязательно:)