Введение в unity addressables. Как интегрировать addressables в свою игру
Вставка
- Опубліковано 20 вер 2024
- В этом видео мы интегрируем addressables в игру tower defense. Узнаем проблемы стандартного подхода к ассетам в юнити и многое другое
Ссылка на Discord - / discord
Весь плейлист по Tower Defense - • Tower Defense tutorial
Исходный код - github.com/gai...
Видео про таски - • Асинхронное программир...
Поддержка канала:
Patreon - www.patreon.co...
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity3d #addressables #разработка игр #gamedev #ityoutubersru
Как же круто, когда есть один полноценный видос, благодаря которому сложная тема через 17 минут становится понятной. Спасибо! Прям руки зачесались, пойду делать.
Максим, огромное спасибо! Очень толково все объясняете и даете наиболее актуальную и ценную информацию.
Спасибо за видео!
P.S.: удобства ради, при клике на группу/элемент в Group в контекстном меню есть опция Simplify Addressable Name, что убирает путь и оставляет только имя элемента, вместо того, чтобы каждый раз руками в инспекторе бахать.
Офигеть, как вовремя! Я как раз собирался разобраться в этом
Спасибо, видео супер! А можешь еще про Zenject рассказать в одном из следующих видео?
Лучше создай для начало свой IoC, хоть и самый простой, чтобы понять как он работает, потом по немножку усложняй его, и тогда больше не будут такие просьбы, тогда поимешь где и как используется и главное для чего такое приспособление, а самое главное будешь понять где и когда стоит использовать а когда нет
@@sergiuc3332 Звучит просто, но Максим явно смог бы объяснить пару тонкостей, до которых самому дойти не так просто
А вот это интересная тема! Особенно в контексте полной разработки Tower Defense.
вижу Максима Крюкова, ставлю лайк не глядя
Спасибо за ультра-полезный контент!
Подскажи, пожалуйста, какой плагин у тебя в ide rider стоит, что так точно копирует интерфейс и код-стайл из visual studio? Или у тебя в VS решарпер стоит?🙏
Как всегда, невероятно полезный материал. Лайк@коммент в поддержку очень полезного канала!
10:11 тут UIщиков немножко дернуло )) там же так хорошо 9slice ложиться... Спасибо за видео ) я пока половину не понял (слабо в асинк работе), но желание разобраться только усилилось
Начало не плохое. Хочется как-то по глубже материал. Как лучше организовать группы. Какие есть подводные камни при организации групп(работа с атласами например и достаточно ли в группы добавить только атласы а сами спрайты не нужны?). Как лучше организовывать сцену(все сбросить на сцену и грузить только ее или по отдельности грузить префабы). Есть ли какие-нибудь паттерны для работы с addressables? Best practices.
Неплохо вы хотите, это на сколько людей будет рассчитано? Максимум 1000
Искренне благодарю за предоставленный материал. Я хорошо понимаю на сколько это не легко. Unity особо не славится качественной документацией поэтому качественный материал думаю будет пользоваться спросом.
Весьма актуальная тема. Благодарю Максим!
Спасибо огромное! Очень полезная инфа, редко где найдешь такую на доступном языке. Осталось только применить в будущих проектах.
Отличный урок,спасибо, жду продолжения!
Класс, спасибо))). Про ECS запиши (LeoECS например)
A там все очень просто, на его основе можно написать свой ecs, еще проще еще лучше. Самый перспективный ecs это ecs от unity, там оптимизация на уровне ядра, там прям видно что написали профессионалы, если присмотрется к исходникам
Спасибо за объяснение! Как раз искал инфу по этой теме
Спасибо за видео! Очень интересная тема :)
Макс спс за видосы!)
Ну ты просто лучший!
О да, то что надо, спс.
Спасибо за урок !!)
Отличное видео!
Полезное видео, спасибо. Сразу в глаза кинулся несуразный трудновоспринимаемый шрифт "Maybe recources or Streaming Assets", ну в принципе как и остальные похожие надписи. Ну это так, чисто фидбек
А мне он как-то понравился своей нестрогостью)
Максим, спасибо вам за полезную информацию на канале. У меня просьба раскрыть тему удаленной загрузки пакетов обновлений,с addressable или без, на примере Azure или того что вы используете повсеместно,хочется вырваться за рамки локальной сети, но нет базы, спасибо.
Cool) Thanks)
Круто, но чет я поплыл, для меня сложно)
Супер, спасибо!
Пока не очень понимаю, в чем радикальное преимущество этой системы перед ассет бандлами?
upd: сделай видео про работу в команде, какую систему контроля версий использовать, как мержить изменения в сценах и префабах, какой должна быть структура проекта итд.
Он же сказал что это надстрока над ассет бандлами. Так что это по сути работа с ассет бандлами. И собственного опыта добавлю что тут есть один большой плюс в том что если ты проект изначально будешь делать используя Addressables, то потом перенести часть контента на сервер будет легко - в несколько кликов + прописать адрес сервер.
@@МихаилСуворов-к2щ Интересно по какому принципу работает эта система, есть например бандл, который содержит много моделек окружения, который мы хотим подгрузить в режиме реального времени в игру. Возможно ли в данном случае делать не полную загрузку бандла, а лишь подгрузку заголовков пакета, чтобы в дальнейшем загружать и выгружать лишь с одного условного бандла ресурсы по мере необходимости? Если я правильно понял, Addressable и выполняет эту задачу в автоматическом режиме. Я еще досконально не ковырял систему поэтому если не прав - поправьте. Далее, если это надстройка над обычными asset bundle не могут ли быть проблемы с подгрузкой больших локаций в реальном времени? В классических asset bundle нету возможности грузить бандл не целиком а только по заголовкам и дергать с него необходимые ресурсы используя заголовок, а так же он по какой то причине использовал раньше основной поток приложения, из за чего часто бывают микрофризы, при вызове функции начинается загрузка бандла целиком, причем не зависимо от размера бандла у меня были микрофризы при асинхронном выполнении. Но, тестировал я очень давно, возможно это пофиксили. Интересно как оно отработает к примеру, в условиях, когда в одном бандле различных файлов много и требуется их загружать реалтайм, например пока бежит игрок в шутере, для того чтобы сделать бесшовный большой мир и экономить оперативную память устройства. Ибо в задачах по типу простой реализации DLC это никогда не было проблемой, даже при использовании классических asset bundle, интересно как система отработает в задачах посложнее.
Максим Крюков, здравствуйте. Пожалуйста, снимите урок по тому как UI должен отслеживать информацию о игроке, который сравниться на сцене?
Видео супер. Но если есть возможность раскрыть бы тему адресаблов более широко )
Привет. Не даёшь частные уроки ?
Круто как всегда, ревью кода когда добивать собираетесь?)
Скоро, многие соскучились за обычными видео
Доброго времени суток! Не нашёл нигде контактов, чтобы задать вам вопрос, поэтому напишу здесь). В январе вы выступали на конференции с этой же темой и там озвучили, что вы закачиваете, помимо бандлов, ещё и Dll. Так вот вопросы, будет ли это работать при сборке на WebGL, как вообще вы интерпретируете эти dll, и как же политика сторов о том, что нельзя добавлять новый функционал (код) без пересборки билда и опрува от них?
хорошая тема, но addressables это панацея?
Ассет бандлы вполне можно использовать
Спасибо!
Максим, видео класс. Надо будет пересмотреть ещё раз потом :D. У меня вопрос, скрипты в addressables тоже можно включать? Или только графическая часть приложения?
Можно включать, но там много нюансов
@@gaitavr1992 Скрипты, которые есть в билде, могут висеть на game objects. Но при этом новые скрипты добавить не получиться. Собственно как с кастомной загрузкой Asset Bundles
Дубликаты из разных проектов тоже будут работать
@@gaitavr1992 Снова я не понимаю о чем речь :0) Какие дубликаты?
Одинаковые скрипты в разных юнити проектах
Доброго дня, Максим! Отличное видео, единственное, что у меня вызвало вопрос, вы постоянно в группах отключаете галочку на "Include in build", но это относится непосредственно к сборке ассетов, а не включению их в билд приложения!
Проверю этот момент, спасибо
да вы правы так и есть! я проверил "Include in build" не связано с билдом, когда вставлена remote автоматом ничего не заходит в билд всё через сервер
10/10
Расскажите, пожалуйста, как вы реализуете паузу. В одном из видео я слышал, что вы делаете это через интерфейс
Спасибо за ролик.
Очень полезный.
У меня вопрос.
Ситуация:
- я загружаю из адресаблов некий ресурс, например префаб, получаю ссылку на ресурс, назову ее "Х";
- делаю "Instantiate" этого префаба;
- выгружаю из памяти ссылку "Х";
Что теперь будет с созданным префабом? Он останется в сцене или ссылку нам нужно хранить на протяжении всей жизни созданного префаба?
Ссылку я всегда храню, мне и самому интересно, что будет. Попробуйте выгрузить, я думаю счетчик ссылок не позволит сломать
Хороший ролик и полезная система, только я не совсем могу понять, может ли она заменить создание пула объектов ? Если например на сцене будет 800 объектов, их лучше инстансить из ассетов, или всё-таки хранить как выключенные статичные в массивах или листах ? Если время жизни объектов фиксированное и они интенсивно будут пропадать и появляться
Для всего применять адрессеблы не нужно
Мои благодарности, оставляю комент для активности.
И по совместительству актуальный для меня вопрос, а можно ли как-то подружить систему адресаблов, с системой АБ тестов?
Например?
Нужна возможность на горячую засплитовать любой указанный ассет, который изначально предполагался один.
Как я понимаю нужна либо возможность вводить какие-то дополнительные варианты в ассет, потипу бандл вариантов, либо возможность создавать дополнительные группы между релизами, и в коде амортизировать работу с этим.
Не знаю что ты имеешь в виду под подружить, разве они как-то могут мешать друг другу. Ещё зависит конечно от системы АБ тестов. У нас например только один раз был опыт работы с АБ тестами и система была в виде статического конфига, для скорости. И тут адресаблы как раз подходят, условно если тестируется разный визуал, то загружать определенные ресурсы в зависимости от когорты игроков
Я имею в виду гибкую систему АБ тестов, где не какой-то занный конфигом адресабл ассет подменяется кодом через ифчик, а любой ассет подгружаемый через адресаблы, может быть полменё в любом АБ тесте который может быть сконфигурирован и запущен без релиза. Я полагаю для этого над адресаблами свою обёрточку написать придётся, а по другому вроде ни как.
Bundles грузятся при каждом запуске игры или достаточно одной загрузки и они останутся в проекте?
На диске останутся, потом займет немного времени для загрузки в оперативную память
Видосик о Zenject можно?
Позже
Ничо не понял, но оч интересно
Будет ли видео по zenject?
Будет внедрение в tower defense точно
Я так понимаю, Addressables в WebGL билде работать не будет?
Ни разу не пробовал
@@gaitavr1992 Так как в webgl нету асинхронности, тасков, то полагаю Addressables не заюзать и придется работать по старинке.
Есть еще вопрос.
А как хранятся ссылки на обычные префабы?
Например, у меня есть две ссылки на один и тот же префаб или ресурс (текстура или звуковая дорожка).
По идее в оперативной памяти должны храниться две ссылки на один и тот же ресурс, тем самым предотвращается дублирование данных.
Это так или нет?
На просторах интернета не смог найти ответа.
Да, дублирования не будет
А все эти async работают уже в однопоточном WebGL? Вроде же нет.
Юзайте unitask, там один поток всегда
а если ассетов очень много? скорее всего и каталог будет большой, который придется скачивать заного каждый раз, когда что-то поменялось.
Каталог весит копейки
А как реализовать такую задачу. Есть две сцены на одной сцене есть объект на второй сцене есть канвас с полоской жизни теперь когда с первой сцены объект перекидывается на вторую сцену он автоматом находит полоску жизни. Как это восоздать?
Я не вижу проблемы, скрипты же живут в это время
@@gaitavr1992 Для меня это проблема я только начинаю изучать C# и Юнити и немогу понять как такое реализовать.
@@ko-games7768 Сохранить состояние объекта в конце первого уровня. Загрузить на втором. (как вариант).
Один я не понял в чем отличие от обычной загрузки asset bundles?
Зависимости будут грузиться сами, мы решаем это на уровне конфигурации групп
Плюс каталоги, их бывает несколько штук из разных проектов и все мерджаться в один
Круто)) Ты лучше всех!!! Кто согласен?? Всем Привет! Меня зовут Мандаринка Mincraft! Я ищу людей для совместной игры на Minecraft 1.18.1. серверах; жду вас. Если ты согласен.
Согласен, но играть не пойду
Сложно понять когда не шаришь в потоках)))
Это не потоки, посмотрите видео о тасках на канале
Ваш метод работает только с GameObject, но возможно ли грузить в рантайме AudioClip или Sprites ?
в последней документации версии 1.19 addressables показан пример работы с GameObject, ни слово про обычные ассеты
Можно грузить и их
У меня пока не вышло получить спрайт через метод InstantiateAsync, выдавал ошибку «Key exists as Type=UnityEngine.Texture2D», но я выкрутился по другому, инстанцировал AssetReference и в конструктор скормил assetId (var assetReference = new AssetReference(assetId);), и похожим способом вызвал Addressables.LoadAssetAsync(assetReference) вместо InstantiateAsync, также с помощью await handle.Task получил Texture2D, и просто использовал Sprite.Create для создания спрайта. Тут может есть более простое решение, если кто знает поделитесь. Я думаю суть в том что Sprite это компонент, а Sprite (2D and UI) в Texture Type, это всё же другое, потому получается загрузить только Texture2D.
+
Вот почему игра Valheim мало весит
Уже не актуально ;)
Нужно обновлять контент.
Дорохие храждане, сещас мы будем делать все ихры.
Это вы так пошутили? Не разобрано ни одного вопроса по этой теме. Как грузить и выгружать, и так понятно. Более актуальные вопросы это:
1) Как указать в Unity директорию, куда класть скомпилированные ресурсы
2) Как указать директорию, откуда брать ресурсы для создания билда
3) Как указать директорию, откуда будут читаться ресурсы после установки
4) Как из программы получить полный путь к этой директории
5) Как на Android указать короткий путь к папке откуда запускается приложение
(Типа .\paapath\XXX Как оно выглядит на Android?)
6) Как скомпилировать 1 новый ресурс в Addressabbles
7) Как переписать русурс по пункту 6. вручную, что бы его могло
загрузить УЖЕ установленное приложение.
8) Как изменить уже имеющийся ресурс в установленном приложении
9) Чем отличаются BuildPath и LoadPath в группе adressables и в настройках
Addressabbles?
10) При выполнении LoadAssetAsync полностью перекрывается поток приложения,
почему? (Это касается всего из чего бы не выполнялось корутина, Await и тд)
11) Если грузить сцену асинхронно, почему виснет поток намерво, пока
полностью не загрузит?
12) Как остледить что делает на текущий момент асинхронная функция
13) Что такое DontDestroyOnLoad?
А не та бесполезная муть в видео. Я поражаюсь комментариям ниже, покупные что ли?
Да я всех купил, сколько вам заплатить за положительный отзыв?)
А если серьёзно, то название видео читали? Какой андроид и потоки? И кстати, ни на одном проекте у меня поток не вис. Так что можете взять свой список и написать по нему статью с пруфами. Если желания делиться информацией нет, то увы, развлекайтесь в комментариях дальше
@@gaitavr1992 Простите, просто наболело, я пояснил на GD почему. В том-то и дело, что если бы я мог бы на них ответить я бы вместо наездов написал бы ответы, что бы об этом хоть где-то информация была. У вас интересные видео, а тут тема актуальная, очень актуальная, но самого главного нет! Смотря ваши видео, мне все нравится, а в данном случае, как будто послали. Я готов поделиться информацией любой, той что знаю, но от нее толку не больше чем от видео. Вы сами можете провести эксперимент. Включите галку разделять ресурсы при компиляции и вас ждет сюрприз - если, например, сцену добавить в addressables, она не загрузится (по крайней мере на андройде). В связи с этим, вопроc выше, как указать путь? Ну и так далее. Цель-то сделать не отдельно единично загружаемые ресурсы, а полную динамическую подгрузку всего с адекватной архитектурой и хранением данных. Я понимаю, что никто этим не замарачивается, но не понимаю почему?
У меня в рабочем проекте очень много сцен, которые пакуются отдельно. Все работает на андроиде