Введение в unity addressables. Как интегрировать addressables в свою игру

2022 ж. 8 Қаң.
34 771 Рет қаралды

В этом видео мы интегрируем addressables в игру tower defense. Узнаем проблемы стандартного подхода к ассетам в юнити и многое другое
Ссылка на Discord - / discord
Весь плейлист по Tower Defense - • Tower Defense tutorial
Исходный код - github.com/gaitavr/towerDefen...
Видео про таски - • Асинхронное программир...
Поддержка канала:
Patreon - www.patreon.com/user?u=32502669
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity3d #addressables #разработка игр #gamedev #ityoutubersru

Пікірлер
  • Как же круто, когда есть один полноценный видос, благодаря которому сложная тема через 17 минут становится понятной. Спасибо! Прям руки зачесались, пойду делать.

    @tenko4647@tenko46472 жыл бұрын
  • А вот это интересная тема! Особенно в контексте полной разработки Tower Defense.

    @user-ry6em9xg8y@user-ry6em9xg8y2 жыл бұрын
  • Офигеть, как вовремя! Я как раз собирался разобраться в этом

    @CoolinarGameDeveloper@CoolinarGameDeveloper2 жыл бұрын
  • Спасибо огромное! Очень полезная инфа, редко где найдешь такую на доступном языке. Осталось только применить в будущих проектах.

    @user-ip7pb6kt1h@user-ip7pb6kt1h2 жыл бұрын
  • Как всегда, невероятно полезный материал. Лайк@коммент в поддержку очень полезного канала!

    @Elledan3101@Elledan3101 Жыл бұрын
  • Весьма актуальная тема. Благодарю Максим!

    @andrewmad@andrewmad2 жыл бұрын
  • Спасибо за объяснение! Как раз искал инфу по этой теме

    @protudorin@protudorin2 жыл бұрын
  • Отличный урок,спасибо, жду продолжения!

    @gameviewer5693@gameviewer56932 жыл бұрын
  • Спасибо за видео! Очень интересная тема :)

    @VADIM-SOLOV@VADIM-SOLOV2 жыл бұрын
  • Спасибо за видео! P.S.: удобства ради, при клике на группу/элемент в Group в контекстном меню есть опция Simplify Addressable Name, что убирает путь и оставляет только имя элемента, вместо того, чтобы каждый раз руками в инспекторе бахать.

    @lomion46@lomion462 жыл бұрын
  • Макс спс за видосы!)

    @midompany6121@midompany61212 жыл бұрын
  • вижу Максима Крюкова, ставлю лайк не глядя

    @jelewow962@jelewow9622 жыл бұрын
  • Спасибо за урок !!)

    @user-we6si4mi3x@user-we6si4mi3x Жыл бұрын
  • О да, то что надо, спс.

    @trell_7842@trell_78422 жыл бұрын
  • Ну ты просто лучший!

    @vladyslavhorbatiuk3089@vladyslavhorbatiuk30892 жыл бұрын
  • Супер, спасибо!

    @mdvulfix@mdvulfix2 жыл бұрын
  • 10:11 тут UIщиков немножко дернуло )) там же так хорошо 9slice ложиться... Спасибо за видео ) я пока половину не понял (слабо в асинк работе), но желание разобраться только усилилось

    @AlekseyLoykuts@AlekseyLoykuts2 жыл бұрын
  • Спасибо!

    @MrFtik@MrFtik2 жыл бұрын
  • Класс, спасибо))). Про ECS запиши (LeoECS например)

    @alexsklyarov6792@alexsklyarov67922 жыл бұрын
    • A там все очень просто, на его основе можно написать свой ecs, еще проще еще лучше. Самый перспективный ecs это ecs от unity, там оптимизация на уровне ядра, там прям видно что написали профессионалы, если присмотрется к исходникам

      @sergiuc3332@sergiuc33322 жыл бұрын
  • Отличное видео!

    @Bardsfails@Bardsfails2 жыл бұрын
  • Cool) Thanks)

    @rdragon587@rdragon5872 жыл бұрын
  • Спасибо, видео супер! А можешь еще про Zenject рассказать в одном из следующих видео?

    @kiteva7087@kiteva70872 жыл бұрын
    • Лучше создай для начало свой IoC, хоть и самый простой, чтобы понять как он работает, потом по немножку усложняй его, и тогда больше не будут такие просьбы, тогда поимешь где и как используется и главное для чего такое приспособление, а самое главное будешь понять где и когда стоит использовать а когда нет

      @sergiuc3332@sergiuc33322 жыл бұрын
    • @@sergiuc3332 Звучит просто, но Максим явно смог бы объяснить пару тонкостей, до которых самому дойти не так просто

      @ruslan_yefimov@ruslan_yefimov2 жыл бұрын
  • Полезное видео, спасибо. Сразу в глаза кинулся несуразный трудновоспринимаемый шрифт "Maybe recources or Streaming Assets", ну в принципе как и остальные похожие надписи. Ну это так, чисто фидбек

    @romansalnikov5079@romansalnikov50792 жыл бұрын
    • А мне он как-то понравился своей нестрогостью)

      @gaitavr1992@gaitavr19922 жыл бұрын
  • 10/10

    @ValeGoG@ValeGoG2 жыл бұрын
  • Видео супер. Но если есть возможность раскрыть бы тему адресаблов более широко )

    @ilgiz2616@ilgiz26162 жыл бұрын
  • Расскажите, пожалуйста, как вы реализуете паузу. В одном из видео я слышал, что вы делаете это через интерфейс

    @user-oz2eg7zr2c@user-oz2eg7zr2c2 жыл бұрын
  • Круто, но чет я поплыл, для меня сложно)

    @bigbluepie8983@bigbluepie89832 жыл бұрын
  • Максим, спасибо вам за полезную информацию на канале. У меня просьба раскрыть тему удаленной загрузки пакетов обновлений,с addressable или без, на примере Azure или того что вы используете повсеместно,хочется вырваться за рамки локальной сети, но нет базы, спасибо.

    @lnPower@lnPower2 жыл бұрын
  • Доброго времени суток! Не нашёл нигде контактов, чтобы задать вам вопрос, поэтому напишу здесь). В январе вы выступали на конференции с этой же темой и там озвучили, что вы закачиваете, помимо бандлов, ещё и Dll. Так вот вопросы, будет ли это работать при сборке на WebGL, как вообще вы интерпретируете эти dll, и как же политика сторов о том, что нельзя добавлять новый функционал (код) без пересборки билда и опрува от них?

    @vladimirlatyshev7181@vladimirlatyshev7181 Жыл бұрын
  • Максим Крюков, здравствуйте. Пожалуйста, снимите урок по тому как UI должен отслеживать информацию о игроке, который сравниться на сцене?

    @kingofbattleonline@kingofbattleonline2 жыл бұрын
  • Начало не плохое. Хочется как-то по глубже материал. Как лучше организовать группы. Какие есть подводные камни при организации групп(работа с атласами например и достаточно ли в группы добавить только атласы а сами спрайты не нужны?). Как лучше организовывать сцену(все сбросить на сцену и грузить только ее или по отдельности грузить префабы). Есть ли какие-нибудь паттерны для работы с addressables? Best practices.

    @HadjimeSun@HadjimeSun2 жыл бұрын
    • Неплохо вы хотите, это на сколько людей будет рассчитано? Максимум 1000

      @gaitavr1992@gaitavr19922 жыл бұрын
    • Искренне благодарю за предоставленный материал. Я хорошо понимаю на сколько это не легко. Unity особо не славится качественной документацией поэтому качественный материал думаю будет пользоваться спросом.

      @HadjimeSun@HadjimeSun2 жыл бұрын
  • Привет. Не даёшь частные уроки ?

    @DmitryTrump@DmitryTrump2 жыл бұрын
  • Есть еще вопрос. А как хранятся ссылки на обычные префабы? Например, у меня есть две ссылки на один и тот же префаб или ресурс (текстура или звуковая дорожка). По идее в оперативной памяти должны храниться две ссылки на один и тот же ресурс, тем самым предотвращается дублирование данных. Это так или нет? На просторах интернета не смог найти ответа.

    @user-su7yd6og7y@user-su7yd6og7y2 жыл бұрын
    • Да, дублирования не будет

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Мои благодарности, оставляю комент для активности. И по совместительству актуальный для меня вопрос, а можно ли как-то подружить систему адресаблов, с системой АБ тестов?

    @TieoZ@TieoZ2 жыл бұрын
    • Например?

      @gaitavr1992@gaitavr19922 жыл бұрын
    • Нужна возможность на горячую засплитовать любой указанный ассет, который изначально предполагался один. Как я понимаю нужна либо возможность вводить какие-то дополнительные варианты в ассет, потипу бандл вариантов, либо возможность создавать дополнительные группы между релизами, и в коде амортизировать работу с этим.

      @TieoZ@TieoZ2 жыл бұрын
    • Не знаю что ты имеешь в виду под подружить, разве они как-то могут мешать друг другу. Ещё зависит конечно от системы АБ тестов. У нас например только один раз был опыт работы с АБ тестами и система была в виде статического конфига, для скорости. И тут адресаблы как раз подходят, условно если тестируется разный визуал, то загружать определенные ресурсы в зависимости от когорты игроков

      @luchacorporation784@luchacorporation7842 жыл бұрын
    • Я имею в виду гибкую систему АБ тестов, где не какой-то занный конфигом адресабл ассет подменяется кодом через ифчик, а любой ассет подгружаемый через адресаблы, может быть полменё в любом АБ тесте который может быть сконфигурирован и запущен без релиза. Я полагаю для этого над адресаблами свою обёрточку написать придётся, а по другому вроде ни как.

      @TieoZ@TieoZ2 жыл бұрын
  • Круто как всегда, ревью кода когда добивать собираетесь?)

    @naxa1ka@naxa1ka2 жыл бұрын
    • Скоро, многие соскучились за обычными видео

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Пока не очень понимаю, в чем радикальное преимущество этой системы перед ассет бандлами? upd: сделай видео про работу в команде, какую систему контроля версий использовать, как мержить изменения в сценах и префабах, какой должна быть структура проекта итд.

    @guiltyshoes@guiltyshoes2 жыл бұрын
    • Он же сказал что это надстрока над ассет бандлами. Так что это по сути работа с ассет бандлами. И собственного опыта добавлю что тут есть один большой плюс в том что если ты проект изначально будешь делать используя Addressables, то потом перенести часть контента на сервер будет легко - в несколько кликов + прописать адрес сервер.

      @user-cx1vt1kp1j@user-cx1vt1kp1j2 жыл бұрын
    • @@user-cx1vt1kp1j Интересно по какому принципу работает эта система, есть например бандл, который содержит много моделек окружения, который мы хотим подгрузить в режиме реального времени в игру. Возможно ли в данном случае делать не полную загрузку бандла, а лишь подгрузку заголовков пакета, чтобы в дальнейшем загружать и выгружать лишь с одного условного бандла ресурсы по мере необходимости? Если я правильно понял, Addressable и выполняет эту задачу в автоматическом режиме. Я еще досконально не ковырял систему поэтому если не прав - поправьте. Далее, если это надстройка над обычными asset bundle не могут ли быть проблемы с подгрузкой больших локаций в реальном времени? В классических asset bundle нету возможности грузить бандл не целиком а только по заголовкам и дергать с него необходимые ресурсы используя заголовок, а так же он по какой то причине использовал раньше основной поток приложения, из за чего часто бывают микрофризы, при вызове функции начинается загрузка бандла целиком, причем не зависимо от размера бандла у меня были микрофризы при асинхронном выполнении. Но, тестировал я очень давно, возможно это пофиксили. Интересно как оно отработает к примеру, в условиях, когда в одном бандле различных файлов много и требуется их загружать реалтайм, например пока бежит игрок в шутере, для того чтобы сделать бесшовный большой мир и экономить оперативную память устройства. Ибо в задачах по типу простой реализации DLC это никогда не было проблемой, даже при использовании классических asset bundle, интересно как система отработает в задачах посложнее.

      @chesukineyznalipahana@chesukineyznalipahana2 жыл бұрын
  • Bundles грузятся при каждом запуске игры или достаточно одной загрузки и они останутся в проекте?

    @bkWorm-gx2pi@bkWorm-gx2pi2 жыл бұрын
    • На диске останутся, потом займет немного времени для загрузки в оперативную память

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Хороший ролик и полезная система, только я не совсем могу понять, может ли она заменить создание пула объектов ? Если например на сцене будет 800 объектов, их лучше инстансить из ассетов, или всё-таки хранить как выключенные статичные в массивах или листах ? Если время жизни объектов фиксированное и они интенсивно будут пропадать и появляться

    @neverworld8815@neverworld88152 жыл бұрын
    • Для всего применять адрессеблы не нужно

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Спасибо за ролик. Очень полезный. У меня вопрос. Ситуация: - я загружаю из адресаблов некий ресурс, например префаб, получаю ссылку на ресурс, назову ее "Х"; - делаю "Instantiate" этого префаба; - выгружаю из памяти ссылку "Х"; Что теперь будет с созданным префабом? Он останется в сцене или ссылку нам нужно хранить на протяжении всей жизни созданного префаба?

    @user-su7yd6og7y@user-su7yd6og7y2 жыл бұрын
    • Ссылку я всегда храню, мне и самому интересно, что будет. Попробуйте выгрузить, я думаю счетчик ссылок не позволит сломать

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Доброго дня, Максим! Отличное видео, единственное, что у меня вызвало вопрос, вы постоянно в группах отключаете галочку на "Include in build", но это относится непосредственно к сборке ассетов, а не включению их в билд приложения!

    @mariacho8174@mariacho81742 жыл бұрын
    • Проверю этот момент, спасибо

      @gaitavr1992@gaitavr19922 жыл бұрын
    • да вы правы так и есть! я проверил "Include in build" не связано с билдом, когда вставлена remote автоматом ничего не заходит в билд всё через сервер

      @Eduard02834@Eduard02834 Жыл бұрын
  • +

    @Eduard02834@Eduard028342 жыл бұрын
  • Будет ли видео по zenject?

    @Frozo13@Frozo132 жыл бұрын
    • Будет внедрение в tower defense точно

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Максим, видео класс. Надо будет пересмотреть ещё раз потом :D. У меня вопрос, скрипты в addressables тоже можно включать? Или только графическая часть приложения?

    @evilvirraZzz@evilvirraZzz2 жыл бұрын
    • Можно включать, но там много нюансов

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 Скрипты, которые есть в билде, могут висеть на game objects. Но при этом новые скрипты добавить не получиться. Собственно как с кастомной загрузкой Asset Bundles

      @Codirable@Codirable2 жыл бұрын
    • Дубликаты из разных проектов тоже будут работать

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 Снова я не понимаю о чем речь :0) Какие дубликаты?

      @Codirable@Codirable2 жыл бұрын
    • Одинаковые скрипты в разных юнити проектах

      @gaitavr1992@gaitavr19922 жыл бұрын
  • А как реализовать такую задачу. Есть две сцены на одной сцене есть объект на второй сцене есть канвас с полоской жизни теперь когда с первой сцены объект перекидывается на вторую сцену он автоматом находит полоску жизни. Как это восоздать?

    @ko-games7768@ko-games77682 жыл бұрын
    • Я не вижу проблемы, скрипты же живут в это время

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 Для меня это проблема я только начинаю изучать C# и Юнити и немогу понять как такое реализовать.

      @ko-games7768@ko-games77682 жыл бұрын
    • @@ko-games7768 Сохранить состояние объекта в конце первого уровня. Загрузить на втором. (как вариант).

      @user-go7qv2yc6z@user-go7qv2yc6z2 жыл бұрын
  • Я так понимаю, Addressables в WebGL билде работать не будет?

    @Saltant@Saltant2 жыл бұрын
    • Ни разу не пробовал

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 Так как в webgl нету асинхронности, тасков, то полагаю Addressables не заюзать и придется работать по старинке.

      @Saltant@Saltant2 жыл бұрын
  • а если ассетов очень много? скорее всего и каталог будет большой, который придется скачивать заного каждый раз, когда что-то поменялось.

    @AndreyKho232@AndreyKho2322 жыл бұрын
    • Каталог весит копейки

      @gaitavr1992@gaitavr19922 жыл бұрын
  • хорошая тема, но addressables это панацея?

    @animagnoa@animagnoa2 жыл бұрын
    • Ассет бандлы вполне можно использовать

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Видосик о Zenject можно?

    @pavelmykutsky1098@pavelmykutsky10982 жыл бұрын
    • Позже

      @gaitavr1992@gaitavr19922 жыл бұрын
  • А все эти async работают уже в однопоточном WebGL? Вроде же нет.

    @thewebsapiens@thewebsapiens Жыл бұрын
    • Юзайте unitask, там один поток всегда

      @gaitavr1992@gaitavr1992 Жыл бұрын
  • Ваш метод работает только с GameObject, но возможно ли грузить в рантайме AudioClip или Sprites ? в последней документации версии 1.19 addressables показан пример работы с GameObject, ни слово про обычные ассеты

    @tarasklymenko5211@tarasklymenko5211 Жыл бұрын
    • Можно грузить и их

      @gaitavr1992@gaitavr1992 Жыл бұрын
    • У меня пока не вышло получить спрайт через метод 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.

      @NoOne-ov5ku@NoOne-ov5ku Жыл бұрын
  • Один я не понял в чем отличие от обычной загрузки asset bundles?

    @user-oj4ye4ol6m@user-oj4ye4ol6m2 жыл бұрын
    • Зависимости будут грузиться сами, мы решаем это на уровне конфигурации групп

      @gaitavr1992@gaitavr19922 жыл бұрын
    • Плюс каталоги, их бывает несколько штук из разных проектов и все мерджаться в один

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Сложно понять когда не шаришь в потоках)))

    @askaranarbekov3145@askaranarbekov31452 жыл бұрын
    • Это не потоки, посмотрите видео о тасках на канале

      @gaitavr1992@gaitavr19922 жыл бұрын
  • Вот почему игра Valheim мало весит

    @MeaNX@MeaNX2 жыл бұрын
  • Круто)) Ты лучше всех!!! Кто согласен?? Всем Привет! Меня зовут Мандаринка Mincraft! Я ищу людей для совместной игры на Minecraft 1.18.1. серверах; жду вас. Если ты согласен.

    @MANDRAGORA_@MANDRAGORA_2 жыл бұрын
    • Согласен, но играть не пойду

      @usmax@usmax2 жыл бұрын
  • Уже не актуально ;) Нужно обновлять контент.

    @SerhiiBlender@SerhiiBlender10 ай бұрын
  • Дорохие храждане, сещас мы будем делать все ихры.

    @Worlfable@Worlfable Жыл бұрын
  • Это вы так пошутили? Не разобрано ни одного вопроса по этой теме. Как грузить и выгружать, и так понятно. Более актуальные вопросы это: 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? А не та бесполезная муть в видео. Я поражаюсь комментариям ниже, покупные что ли?

    @VitalSchool@VitalSchool2 жыл бұрын
    • Да я всех купил, сколько вам заплатить за положительный отзыв?)

      @gaitavr1992@gaitavr19922 жыл бұрын
    • А если серьёзно, то название видео читали? Какой андроид и потоки? И кстати, ни на одном проекте у меня поток не вис. Так что можете взять свой список и написать по нему статью с пруфами. Если желания делиться информацией нет, то увы, развлекайтесь в комментариях дальше

      @gaitavr1992@gaitavr19922 жыл бұрын
    • @@gaitavr1992 Простите, просто наболело, я пояснил на GD почему. В том-то и дело, что если бы я мог бы на них ответить я бы вместо наездов написал бы ответы, что бы об этом хоть где-то информация была. У вас интересные видео, а тут тема актуальная, очень актуальная, но самого главного нет! Смотря ваши видео, мне все нравится, а в данном случае, как будто послали. Я готов поделиться информацией любой, той что знаю, но от нее толку не больше чем от видео. Вы сами можете провести эксперимент. Включите галку разделять ресурсы при компиляции и вас ждет сюрприз - если, например, сцену добавить в addressables, она не загрузится (по крайней мере на андройде). В связи с этим, вопроc выше, как указать путь? Ну и так далее. Цель-то сделать не отдельно единично загружаемые ресурсы, а полную динамическую подгрузку всего с адекватной архитектурой и хранением данных. Я понимаю, что никто этим не замарачивается, но не понимаю почему?

      @VitalSchool@VitalSchool2 жыл бұрын
    • У меня в рабочем проекте очень много сцен, которые пакуются отдельно. Все работает на андроиде

      @gaitavr1992@gaitavr19922 жыл бұрын
KZhead