Оптимизация игры на Unity. Entity Component System, LeoECS

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ส.ค. 2024
  • LeoECS за 20 минут! Осваиваем Entity Component System на примере фрейморвка LeoECS
    Салют, ты на канале Night Train Code 😎
    Подробный урок по LeoECS
    • 🎮 Скачать материалы из урока:
    drive.google.com/file/d/1WPht...
    • 🎮 LeoECS: github.com/Leopotam/ecs
    • 🎮 UniLeo: github.com/voody2506/UniLeo
    • 🖤 GitHub: github.com/MeeXaSiK
    • 🖤 VK: nighttraincode
    • 🖤 Telegram: t.me/nighttraincode
    • 🖤 Instagram: / the.meps_
    Таймлайн:
    00:00 ► Что такое Entity Component System
    00:40 ► Плюсы ECS
    01:09 ► Минусы ECS
    01:36 ► Какой фреймворк выбрать
    01:46 ► Что мы получим в конце урока
    01:59 ► Как установить LeoECS
    02:15 ► Как связать ECS и MonoBehaviour Unity?
    03:33 ► Начинаем писать код передвижения персонажа
    04:33 ► Что такое EcsFilter
    04:58 ► Тэги для поиска
    05:20 ► Что такое ref и var
    05:33 ► Как получить компонент из Entity
    06:47 ► Как запустить системы ECS
    06:58 ► Как создать entity персонажа
    07:14 ► ECS Component Provider. UniLeo
    07:55 ► Convert to Entity
    08:28 ► Как системе различать Entities?
    08:52 ► MouseLook System
    09:16 ► Интерфейсы систем Leo ECS
    09:29 ► Как получить Entity из фильтра
    09:37 ► Как получить или задать компонент для entity
    09:53 ► Получение entity по инту
    10:14 ► Как отключить курсор. Init System
    10:24 ► Пара фишечек с атрибутами
    10:37 ► События и запросы. Event, Request
    10:49 ► Прыжок игрока с помощью event
    11:13 ► OneFrame компонент и как его добавить
    11:21 ► Пробегаемся по коду
    12:23 ► Тестируем прыжки
    12:35 ► Блоки и таймеры
    13:06 ► Как исключить компонент при поиске. Exclude
    13:42 ► Связь физики и ECS. Триггеры
    14:20 ► Подводный камень с OneFrame
    14:48 ► Как обратиться к ECS через MonoBehaviour
    14:52 ► GetWorld() и SendMessage()
    15:12 ► Как получить мир в системе
    15:38 ► Entity Reference
    15:46 ► Как получить конкретную entity через GetComponent()
    16:13 ► Как задать entity reference при инициализации
    16:41 ► Injections. Инжект компонентов в системы
    17:20 ► Auto-Inject компонента
    17:32 ► Включение графики при входе в триггер
    18:03 ► Фишки для избранных 😎
    18:05 ► GetEntity по фильтру из MonoBehaviour
    18:29 ► Метод Has()
    18:34 ► EcsComponentRef, Ref() и Unref()
    19:07 ► Как правильно удалять entity и GameObject
    Поддержка канала:
    www.donationalerts.com/r/nigh...

ความคิดเห็น • 167

  • @Digildon
    @Digildon 2 ปีที่แล้ว +8

    Чел, спасибо.
    Твой тутор прям как вода в пустыне. Сейчас нигде нет, но капец как нужно.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      На здоровье, рад, что помог)

  • @entity5148
    @entity5148 2 ปีที่แล้ว +2

    Большое спасибо тебе за полезный контент!)
    Желаю тебе много подписчиков!

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      На здоровье 🍰
      Большое спасибо 😎😜

  • @adengard3473
    @adengard3473 2 ปีที่แล้ว +29

    Хотелось бы режиссерскую версию подлиннее с обзором лео ецс (какие методы есть, что делают, за что отвечают, как использовать... Чтобы прям совсем для чайников). Видео супер, канал бомбезный, автор попадет в вальхаллу для прогеров ))) хотелось бы такое года 3 назад

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +3

      Спасибо 🍰😜
      Можешь написать про те моменты, с которыми есть непонятки в ECS. После того, как остальные ролики по плану смастерю, возможно, ещё более подробный урок выпущу)
      А пока в этом попытался собрать максимум того, что точно пригодится при разработке или используется чаще всего 🍨

    • @adengard3473
      @adengard3473 2 ปีที่แล้ว +9

      @@NightTrainCode Проблема в том, что ecs считается как бы не для новичков и про неё может рассказать два с половиной человека, которые говорят уже на непонятном языке, оперируя терминами которые иногда за гранью понимания ( а если и понятны, то только в теории... да и то с натяжкой. Плюс это еще на пятой скорости речи, так что мозги пухнут). Понятное дело, что можно на паузу ставить и короткие ролики чаще смотрят, но бывает тяжко воспринимать не линейную инфу, да еще и без пояснений или без представления полной картины (чего мы хотим добиться, почему именно так, какие проблемы нас могли бы подстерегать). ВВодный урок на мой взгляд должен рассказать как работает лео (имеется ввиду методы которыми мы можем оперировать, их назначение, порядок применения с пояснениями (Что мы делаем и почему в таком порядке. Казалось бы это очевидно, но думаю не всем).

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +10

      @Aden Gard Конечно, далеко не всем это очевидно, если даже про монобехи мне пишут люди, что не всё понятно
      Сначала только все к ООП привыкли, а тут ECS со своим дата ориентед с ноги влетает)
      Если будет время и желание, разжую LeoECS для новичков 🔥

    • @adengard3473
      @adengard3473 2 ปีที่แล้ว +4

      @@NightTrainCode Просто по юнити тонны видео где каждый кто, что то пишет, говорит это вот первое что вы видите, метод старт и обдейт. В других еще скажут, что есть Авейк и ОнЕнейбл, в третьем Фиксед и Ласт обдейты, расскажут для чего все это... И так по крупицам собираешь картину, а с лео есть 3 видео и черная магия ))). Не понятно , что прописывать, что там делается, что можно прописать.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@adengard3473 Там по документации всё достаточно просто. А тем, кто в ООП шарит - будет куда легче разобраться без видосов

  • @vovanchik_ru4208
    @vovanchik_ru4208 2 ปีที่แล้ว +19

    слишком быстро. Я достаточно хорошо знаком с материалом, но даже для меня всё просто какое-то мелькание картинки.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      Спасибо за замечание, учту в следующих роликах 🤙

  • @grandsunhar
    @grandsunhar 2 ปีที่แล้ว

    Супер

  • @zitskycom
    @zitskycom 2 ปีที่แล้ว +4

    Ох е, ток сегодня узнал про ecs, думал старое видео смотрю, а оно 6 часов назад вышло 😂

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      Это я всё предусмотрел 😄🔥

  • @Kealstex
    @Kealstex 2 ปีที่แล้ว +4

    Думаю, пора попробовать ECS. Псмотрела видос.
    " ну да,вроде всё понятно"
    *через полтора часа..*
    " ДА БЛ№№Ь ЧО ОН НЕ ПРЫГАЕТ"
    боже дай сил не сойти с ума.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Если нервов не хватает, то можно и дальше на монобехах кодить)
      Тем более если ты любитель и не требуют этого на работе

    • @Kealstex
      @Kealstex 2 ปีที่แล้ว +4

      @@NightTrainCode уже разобралась:D спасибо.
      да на работе не требует, но для самообразования явно полезно. так глядишь, через полгода и сферу деятельности сменить можно будет в качестве джуна)

    • @pengw1negames
      @pengw1negames ปีที่แล้ว

      @@NightTrainCode Такая же проблема, ну не прыгает и все. К тому же зависаю в воздухе и rigidbody не помогает. Гравитации будто не существует. Думал что прыжки помогут это исправить, однако нет, все так же в воздухе, так еще и не прыгает

  • @KingoSr
    @KingoSr ปีที่แล้ว +1

    Что делать, если ошибка при добавлении проекта из git с помощью package manager?

  • @user-jc3go7mf2n
    @user-jc3go7mf2n 4 หลายเดือนก่อน +1

    Отдельное спасибо за 18:16 пол дня тупил

  • @user-jc3go7mf2n
    @user-jc3go7mf2n 4 หลายเดือนก่อน

    Проморгал я момент с entity reference, думал думал как решить, в итоге сделал через сравнивание позиции коллайдера и всех энтити, но твое решение куда лучше

  • @PurpleDaemon_
    @PurpleDaemon_ 2 ปีที่แล้ว

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

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Да, всё по отдельным системам, конечно
      Системы на каждый чих
      Но никто не мешает и всё в одну засунуть)

  • @user-zf7fl8xq5m
    @user-zf7fl8xq5m 2 ปีที่แล้ว +1

    А что лучше использовать? Night cache или Ecs для андроидов? И ещё, проверять постоянно например jumpEvent не затратно? или лучше сделать Action в структуре и через него методы подписывать

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Ecs в том случае, если уверен, что справишься с этим паттерном и хорошо в нём шаришь
      А так вместо Ecs и NightCache рекомендую обратить внимание на мой MonoCache 2.0:
      github.com/MeeXaSiK/MonoCache
      Системка из моего первого видео, которую я обновил и довёл до ума. Документация имеется (версия в видео устарела), там всё проще, чем с NightCache

  • @great8814
    @great8814 2 ปีที่แล้ว +2

    Привет! Скоро допишу одну из своих игр и недавно узнал про ecs. Думаю следующую свою +- крупную игру написать с помощью ecs. Но мне интересно, если я разберусь в esc, то мне нужно будет всю игру писать с помощью ecs? Это как архитектура или вокруг ecs нужно выстраивать какую-то архитектуру для ecs? Спасибо!

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Можешь что-то на монобехах писать, можешь что-то на ECS, никто не запрещает)
      В ECS кучу систем и компонентов пиши на каждый чих, вот и получится архитектура. Но, конечно, всё делать надо с умом и думать на будущее

  • @_EnVyUs
    @_EnVyUs 2 ปีที่แล้ว +4

    У меня вот такой вопрос, не затратно ли каждый раз использовать фильтры и возможно ли хеширование в ecs?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      Нет, не затратно, фильтры обновляются только при изменении компонентов на entity, а компоненты достаются по интам

    • @vovanchik_ru4208
      @vovanchik_ru4208 2 ปีที่แล้ว +4

      нет, не затратно. Фильтры это просто "ключи" к определённой области памяти. А вот циклы в run должны вызывать больше вопросов :) Если у Вас заведомо единственный компонент в фильтре, то рациональней использовать просто условие if(filter.Length>0)...
      Но на самом деле это всё же экономия на спичках. Систем может быть сотни и тысячи при правильном их использовании, ведь они не обязаны всегда все использоваться. За остальные мелочи отвечают оптимизаторы при подготовке кода для виртуальной машины(JIT-компиляция, CLR и даже burst можно использовать :)). Короче, просто пишите код, а там разберётесь с производительностью. При сколь-либо правильном использовании ecs подхода - запас прочности производительности будет достаточным :) Ну а если что, то не стесняйтесь использовать стандартный профилировщик unity для большего понимание на что надо пенять :) Удачи!

  • @daemonstergames716
    @daemonstergames716 2 ปีที่แล้ว

    А scriptable objects можно использовать с ECS? Нет у них побочных конфликтов?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Можно, всё там окей)
      Им там не из-за чего возникать, на ECS можно творить всё то же самое, что и на монобехах, просто немного по-другому
      Так как это паттерн проектирования, а не какая-то иная магическая штука)

  • @1pampers13aby7
    @1pampers13aby7 2 ปีที่แล้ว

    А будет все работать в 2D? Не могу реализовать прыжок в своей 2д игре. Телепортируется и все(

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      LeoECS будет работать везде)
      Значит где-то допустил ошибку, либо в 2D это немного по-другому реализуется

  • @user-zo7ob4wf8p
    @user-zo7ob4wf8p 21 วันที่ผ่านมา

    Привет, можешь, пожалуйста, сделать ролик про Ecs lite? Там я пробовал совместить Ecs lite и Voody UniLeo, но выдавало ошибку(поменял на leoEcs и все заработало). Но том с 22 года заморозили проект и сейчас развивается только ECS Lite, так что было бы круто узнать как именно с этой версией работать и что можно добавить вместо Voody UniLeo. Спасибо)

  • @vicktoriashepard
    @vicktoriashepard 2 ปีที่แล้ว +3

    Основной плюс ecs не в одном update и не в представлении всех сущностей простыми float, а в не дефрагментации памяти вроде как.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

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

  • @firstvf
    @firstvf 4 หลายเดือนก่อน +2

    За ролик, конечно, спасибо, но единственное, что я не могу понять - зачем делать спидран по ролику-туториалу? Даже если в названии нет ни одного упоминания о том, что это учебный материал, в любом случае с первых секунд он себя позиционирует как обучающий. Невероятно трудно пытаться извлечь какую-то информацию, когда она скипается буквально за 1-2 секунды.. приходится >Постоянно< отматывать назад.
    Надеюсь, если будут еще гайды по ECS, то чуть-чуть по-медленнее и без скипа некоторых новосозданных классов/структур😵‍💫
    Но еще раз спасибо! материала по этой теме действительно мало :(

    • @NightTrainCode
      @NightTrainCode  4 หลายเดือนก่อน +1

      Старый ролик, в новых не спидраню)
      Спасибо за коммент

  • @user-be2cy2fb9u
    @user-be2cy2fb9u 2 ปีที่แล้ว +1

    думаю PlayerInputSystem должна генерировать команды управления для ентити, а уже в нужной системе эти команды преобразуются в логику передвижения ;)

    • @user-be2cy2fb9u
      @user-be2cy2fb9u ปีที่แล้ว

      @Дарий сделать "запись" игры например

  • @OlegRonaldo9
    @OlegRonaldo9 2 ปีที่แล้ว +3

    Спасибо за видео. Есть замечание по поводу скорости, с которой ты объясняешь. В некоторых моментах приходиться на 0.75 ставить.
    И у меня вопросик, менять значения в рантайме никак нельзя? Например чувствительность мыши.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      На здоровье)
      Спасибо за конструктивную критику
      Почему нельзя то?) Всё можно. Персонажи иначе как бы двигались?)

    • @OlegRonaldo9
      @OlegRonaldo9 2 ปีที่แล้ว

      @@NightTrainCode Я имел в виду в ручную в инспекторе. Просто когда запускаешь, то все провайдеры пропадают же.

    • @OlegRonaldo9
      @OlegRonaldo9 2 ปีที่แล้ว

      @@NightTrainCode И ещё можно вопрос. foreach воспринимать как обычный update? На 9:18 ты вынес методы за пределы foreach. Можно было же lookComponent.direction.x = Input.GetAxis("Mouse X); ? Просто для читабельности сделано или есть какой-то сакральный смысл?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      @@OlegRonaldo9 Можно, никто же не запрещает совмещать Ecs и МоноБехи

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      @@OlegRonaldo9 Input.GetAxis не нужно вызывать больше, чем один раз за кадр. Если бы подходящих для этого Entity было бы не 1, а 100, то метод вызвался бы лишних 99 раз, выдав везде одинаковый результат
      Оптимизация)

  • @mihanikgames3304
    @mihanikgames3304 2 ปีที่แล้ว

    быстро пролистал, но вывода о повышении производительности не увидел. Подскажите какой выигрыш по производительности получается и на какой минуте это показано?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Глянь мой ролик про кэширование апдейтов. Там смысл тот же самый в приросте производительности (25%)

    • @mihanikgames3304
      @mihanikgames3304 2 ปีที่แล้ว

      @@NightTrainCode Но ведь это другой метод. Вы хотите сказать, что выигрыш будет такой же?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@mihanikgames3304 Да, на ECS выигрыш будет чуть-чуть больше, но не заметно
      Так как везде смысл в том, что будет один апдейт, вместо огромной кучи

    • @nouaksomtac6782
      @nouaksomtac6782 2 ปีที่แล้ว

      ну я толка пробую Ecs но по моему легкасть распаралеливания наверное просто когда ти проходеш по масиву "обектов" то ти мозеш давать тот момент каздому обекту по патоку вот теперь будет исползаваса болше много поточности (но ето мои догадки)

  • @ncinsli
    @ncinsli 2 ปีที่แล้ว +2

    Отличный ролик, большое спасибо за часть с провайдерами! Почти нет инфы про нее

  • @psy_gamer
    @psy_gamer 2 ปีที่แล้ว +4

    Что тут можно сказать - мой мозг однозначно сломался!
    Интересный вариант, но к нему нужно привыкать не одну неделю.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Что тут можно сказать - ставь мою системку NightCache (есть видос на канале) и не парься 😎🔥

    • @psy_gamer
      @psy_gamer 2 ปีที่แล้ว +1

      @@NightTrainCode Люблю сам писать системы, чтобы потом легче было с ними разбираться, чем использовать чужой фраемворк)
      Но спасибо!

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      @@psy_gamer Это отлично)
      Но бывают случаи, в которых точно не нужно изобретать велосипед, например, свою ECS писать, как это по приколу недавно делал я 😆

  • @bananosplt7368
    @bananosplt7368 2 ปีที่แล้ว

    не пойму, если мы обращаемся к струтурам по ссылкам, не становится она как класс ?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Класс - это класс, а структура - это струкура
      Структура собой представляет значение, а класс - ссылку
      Например, Vector3 - это структура
      Можешь глянуть разницу в справке

    • @walson4708
      @walson4708 2 ปีที่แล้ว +1

      Нет, ты просто не создатель копию объекта структуры, а работаешь напрямую с её первоначальным объектом.

  • @Hellscaner
    @Hellscaner 2 ปีที่แล้ว +1

    Стоит ли сразу учится писать на ECS, или использовать ваш NightCache? А то привык уже к классике.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Да всё по желанию, я и на работе, и у себя NightCache юзаю и иногда подгружаю его обновления на GitHub
      Производительность в итоге не уступает ECS, да и больше всё равно нагрузка идёт на рендеринг, а не на вычисления, так что не парься

  • @OlegRonaldo9
    @OlegRonaldo9 2 ปีที่แล้ว

    Вопрос про удаление объекта. Глянул другие проекты на ECS и почему-то некоторые не удаляют объект, а просто выключает его через SetActive(). Т.е. тут по большому счету это на личное усмотрение? Если не учитывать того, что просто засирается иерархия выключенных объектов.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Возможно в этих проектах работает пул объектов, иначе проще объект просто удалить, а не отключить
      Если объект просто отключить и не удалить Entity, то системы продолжат его обрабатывать, даже если он выключен

    • @OlegRonaldo9
      @OlegRonaldo9 2 ปีที่แล้ว +1

      @@NightTrainCode Спасибо. Про пул объектов не знал.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      @@OlegRonaldo9 На здоровье. У меня есть ролик про Object Pooling

    • @OlegRonaldo9
      @OlegRonaldo9 2 ปีที่แล้ว +1

      @@NightTrainCode Хорошо, гляну.

  • @janitor13
    @janitor13 11 หลายเดือนก่อน

    Когда стоит использовать для классов internal а когда public?

    • @NightTrainCode
      @NightTrainCode  11 หลายเดือนก่อน

      Да забей, пиши public, это я молодой был, глупый)

  • @user-wv4cz4ls4l
    @user-wv4cz4ls4l 2 ปีที่แล้ว +2

    Привет) Спасибо за видос. Лайк и подписка! Понимаю, что рекомендации ютуба, но всё-таки довольно быстро всё происходит в видео. Пришлось пересматривать с паузами) У меня есть несколько вопросов:
    1) По идее связывание с монобехами будет в любом случае. Может вообще выйти так, что из-за кучи связываний производительность станет даже хуже, чем просто на бехах?) Довольно странный вопрос, но мало ли был опыт.
    2) Немного не понял, почему именно система игрока должна быть первой, а потом уже движение?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Привет, спасибо)
      1) Нет, особенно если все ссылки на классы кэшировать в переменные)
      2) Сначала идёт система ввода направления игрока (задаётся Direction), а потом система передвижения двигает игрока в этот самый Direction

    • @user-wv4cz4ls4l
      @user-wv4cz4ls4l 2 ปีที่แล้ว

      @@NightTrainCode Чтобы открыть сцены из архива нужен юнити последней версии? А то у меня что-то не открывает

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@user-wv4cz4ls4l Я на 2021 работаю, но, думаю, и на 2020 должно завестись

  • @user-ml5tn8qn8j
    @user-ml5tn8qn8j 2 ปีที่แล้ว

    Не понимаю почему у меня нет доступа к пространству имен Voody.Unileo хотя я все пакеты установил

    • @pengw1negames
      @pengw1negames ปีที่แล้ว

      Добрый день, решили ли вы эту проблему? Если да то как?

    • @user-ml5tn8qn8j
      @user-ml5tn8qn8j ปีที่แล้ว

      @@pengw1negames это устаревшая информация

    • @user-ml5tn8qn8j
      @user-ml5tn8qn8j ปีที่แล้ว

      @@pengw1negames нужно установить все пакеты Лео
      Стандартный, di и т.д.

  • @intrigazTV
    @intrigazTV 2 ปีที่แล้ว +1

    Как называется эта тема оформления (синтаксиса)? Офигенная

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Привет, "Rider Melon Dark"

  • @user-to5pt1nq6p
    @user-to5pt1nq6p ปีที่แล้ว

    Как я понял, любые Run системы существуют всегда и Run запускается каждый кадр. Поэтому событий как таковых нету, только создание новых энтити или компонентов. Не существует подписок. Это немного ломает мозг и смущает. Я верно это понимаю?

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      События есть и я про это тоже говорил в видео)
      Подписки тоже никто не запрещал

  • @cmldev
    @cmldev 5 หลายเดือนก่อน +1

    Такой бы тутор по LeoEcs lite, было бы супер. Тут уже многое устарело

  • @victorvoiz8839
    @victorvoiz8839 2 ปีที่แล้ว +1

    Блин, сделай подобный видосик по Entitas. На просторах не нашел ни одного нормального

  • @MarePlayZ
    @MarePlayZ ปีที่แล้ว +1

    Начинающий юнити программист... Ещё даже нет своих проектов. Вот сейчас работаю над собственным маленьким шмапом, чисто в юнити без фреймворком и т.д., т.к. не умею пока что. Хочу двигатся и совершенствоваться. С чем стоит знакомится чтобы улучшать свой код? На счёт ролика очень интересно но совсем ничего непонятно😅 надо будет пересмотреть несколько раз

    • @BlackHole-ei9mi
      @BlackHole-ei9mi ปีที่แล้ว

      Бро нет смысла, я сам сижу пытаюсь в фреймворки, но LeoEcs обновился и он сейчас работает со структурами, пока не видел туториалов по нему абсолютно, только документацию на гите смотреть.

  • @IgorKu-m4o
    @IgorKu-m4o 2 ปีที่แล้ว

    Куда движется Юнити? ECS в будущем заменит Монобихейвер? Или они они будут существовать параллельно?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Не думаю, что MonoBehaviour исчезнут. А так, Unity рекламируют системки DOTS и Jobs. Многопоток, привет

  • @HeyWhoTheFuckAreYou
    @HeyWhoTheFuckAreYou 2 ปีที่แล้ว +1

    А как быть если у менять есть условный плагин написанный стандартным ООП, нужно ли самому всё переписывать под ECS в таком случае или стоит отказаться от его использования если этих плагинов достаточно много, а тратить время на то, чтобы адаптировать чужой код не особо хочется???

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Никто не запрещает полностью отказываться от монобехов)
      Если свой плагин использует апдейты, в которых что-то тяжёлое и их много на сцене, то советую перебазироваться на ECS. Если он не требует много ресурсов, то забей, максимум на мой NightCache перекинь, если хочешь. Там архитектуру менять не надо 🤙
      Чужой монобех код переписывать на ECS - да кому оно надо 😄

    • @vovanchik_ru4208
      @vovanchik_ru4208 2 ปีที่แล้ว +1

      хочешь писать на ecs - код надо в любом случае декомпозировать(разделить на мелкие системы) и никуда от этого не деться

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      @@vovanchik_ru4208 В идеале, конечно, чтобы было так. Но надо оценивать и время, которое уйдёт на снос монобехов под корень

    • @HeyWhoTheFuckAreYou
      @HeyWhoTheFuckAreYou 2 ปีที่แล้ว +1

      @@NightTrainCode Ну я хз, он использует Jobs это вроде как ECS и плюс там несколько ассетов которые я использую, потому что не компитентный в таких вопросах, чтобы самому сделать собственный. Это Motion Matching и Final IK, а разбираться с Motion Matching'ом особо желания нет, информации как он работает не особо много да и затраты на разработку собственного того не стоят. Да и про IK не особо много инфы.

    • @vovanchik_ru4208
      @vovanchik_ru4208 2 ปีที่แล้ว +1

      @@HeyWhoTheFuckAreYou Jobs - это всего-лишь попытка внедрить многопоточность в unity. А то что связано с нативным ECS в unity, назывfется DOTS в котором используются Jobs, ECS, BURST и вообще они настолько отделили эту ветку, что даже свои физические движки и рендерер отдельный для работы с DOTS используют. Короче, забудь пока про нативный ecs в Unity. Они слишком заморочились и стабильная версия будет нескоро :) leoecs пока самый удобный способ в c#, чтобы начать его осваивать.

  • @dmitry711
    @dmitry711 11 หลายเดือนก่อน

    Спасибо. Планируешь ли ролик про ECS от Unity (DOTS)?

    • @NightTrainCode
      @NightTrainCode  10 หลายเดือนก่อน +1

      На здоровье. Нет, пока не вижу смысла в DOTS. Лучше уж Morpeh

    • @denisgoodman4492
      @denisgoodman4492 10 หลายเดือนก่อน

      @@NightTrainCode Compile Burst

  • @karimkimsanbaev7932
    @karimkimsanbaev7932 9 หลายเดือนก่อน +3

    Монобэхах)
    Кто использует монобэхи - не забывайте включать поворотники!
    По тутору:
    1. internal в компонентах можно оставить, если провайдеры тоже делать интернал
    2. Time.deltaTime нету в видео - пока не посмотрел в исходник проекта, не понял, что он там нужен. Да, ты об этом сказал)
    3. Камеру обновлять лучше в LateUpdate
    4. Нотация приватных членов класса без _ смотрится не привычно - вкусовщина

  • @georgii_chubov
    @georgii_chubov 2 ปีที่แล้ว +3

    ECS для передвижения игрока выглядит как оверинжиниринг. На примере врагов был бы очевиднее смысл ecs, а именно - заметный выигрыш по производительности. Ведь в остальном классический ООП дизайн лучше

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +2

      Никто не запрещает и монобехи юзать
      Даже такие системки лучше делать системками, чтобы одни выполнялись в одном потоке в Update и можно было контролировать порядок вызовов

  • @walson4708
    @walson4708 2 ปีที่แล้ว

    Всё, Лео екс пришёл кабздец

    • @nightlycat2525
      @nightlycat2525 2 ปีที่แล้ว

      А что с ним?

    • @walson4708
      @walson4708 2 ปีที่แล้ว

      @@nightlycat2525 Уже ничего. Лео просто недавно пригорел и снёс свою репу. Правда, спустя пару дней всё вернул)

  • @1pampers13aby7
    @1pampers13aby7 2 ปีที่แล้ว

    А вы пользовались leoecs-physics?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Да, там тот же смысл в отправке ивента о том, что игрок зашёл в триггер, как и в ролике

    • @1pampers13aby7
      @1pampers13aby7 2 ปีที่แล้ว

      @@NightTrainCode, спс
      но я так понял что в этом копаться и копаться, жаль токо что инфы не так много в инете, особенно на русском (чтоб все возможные нюансы). Вот тоже сделал противника - сделал несколько его копий и при попадании снаряда, они по какой то своей очередности удаляються со сцены. Стреляешь в одного, а умирает тот - что рядом с ним)
      Но конечно ОГРОМНЫЙ + этого всего - производительность и отсутствие макарон, достаточно легко ориентироваться

    • @1pampers13aby7
      @1pampers13aby7 2 ปีที่แล้ว

      @@NightTrainCode, интерестно поитересоваться: как у вас (исходя из вашего опыта) с Виндовсом и МакОС? На чем предпочтительней разрабатывать?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@1pampers13aby7 Тому, кто в ООП не чувствует себя, как рыба в воде, тяжело самому без гайдов разобраться в ECS будет, как и мне в своё время
      Всё с опытом приходит, здесь главное принцип работы паттерна уловить и дело в шляпе
      При попадании можешь сделать реквест (OneFrame компонент) и в него передавать отправителя с дамагом (Unit sender, float damage), чтобы понимать кто кому урон наносит)

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      @@1pampers13aby7 Я всю жизнь на Windows сижу, коллега на Маке работает, ему там удобнее (+ мобильность, если MacBook)
      Я предпочтение стационарному компьютеру на шиндовсе отдаю (хоть ни разу на Маке и не работал), так как запихал себе железо какое захотел и радуешься жизни
      Скорее всего, на МакОС, работать удобнее, но если разработка будет упираться в его железо, то беда

  • @nightkot4917
    @nightkot4917 9 หลายเดือนก่อน +1

    Хорошо бы еще помедленнее, без всего этого "мелькания" и "запредельного скакания по скриптам".

    • @NightTrainCode
      @NightTrainCode  9 หลายเดือนก่อน

      Уже сотый, кто это пишет, это мой старый видос :)

  • @bibyter6451
    @bibyter6451 2 ปีที่แล้ว +1

    Оптимизация какого рода, чойта не понял (

  • @user-hq2wg8pg1l
    @user-hq2wg8pg1l ปีที่แล้ว

    Я в 2D игре, bullet hell. Использовал твой MonoCache
    - передвижение пуль
    - передвижение врагов
    Попробовал реализовать их на LeoEcs, фпс остался одинаковый.
    При 350 обьектах на экране, фпс дропался до 15-20, на обоих системах.

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      Странно, что фпс так сильно дропался в 2D игре, мб батчинг не настроен и текстуры пуль не сжаты.
      Я, кстати, тоже проводил такой тест и фпс был одинаковый. Поэтому отказался от ECS в своём проекте.

    • @user-hq2wg8pg1l
      @user-hq2wg8pg1l ปีที่แล้ว

      @@NightTrainCode это был тест на Redmi 7 кирпиче, спецально храню его для таких целей, пусть знает как он плох
      п.с. там было 350 пуль, с box colider и rigidbody на каждой

    • @user-hq2wg8pg1l
      @user-hq2wg8pg1l ปีที่แล้ว

      @@NightTrainCode я проверил, хз в чем дело, вообщем на слабенькой мобилке (Redmi7) именно с mono cache - 3 фпс, при 350 выстрелах в секунду из пистолета. без mono cache (то есть пулю наследую от обычно монобеха) 40 фпс

    • @MrLuckyLISS
      @MrLuckyLISS ปีที่แล้ว

      @@NightTrainCode Вот эта инфа мне действительно нужна была. Думал, целесообразно ли упороться в ECS или юзать старые добрые Моно, особенно после перерыва в 4 года в Unity

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      @@MrLuckyLISS Производительность ± одинаковая, но на ECS игра будет меньше памяти потреблять. Для мобилок мб критично, но на Mono ни разу не было проблем

  • @4rtochka
    @4rtochka ปีที่แล้ว +2

    Замедлил до х 0.75 но всеравно слишком быстро

  • @pengw1negames
    @pengw1negames ปีที่แล้ว

    @NightTrainCode Пожалуйста выручай, спустя год нашел твой ролик, по очень интересующей теме. Но уже в самом начале затык. Voody.UniLeo никак не находится, хотя пакет поставил

  • @asvirido
    @asvirido 2 ปีที่แล้ว

    Кто-то пробовал на ECS создавать быстро мобильные проекты которые рассчитаны на 2-3 недели разработки полностью игры?

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Можно одинаково быстро, что на монобехах, что на ECS игры сделать
      Всё дело привычки и скиллов

  • @axeplay1490
    @axeplay1490 3 หลายเดือนก่อน +1

    Ну и каша в коде конечно с 4 этажными функциями и изменением кучи скриптов чтобы добавить один объект

  • @denisgoodman4492
    @denisgoodman4492 10 หลายเดือนก่อน

    Все классно, но скорость записи нужно меньше - не комфортно смотреть.
    И не понятно зачем везде при инициализации объектов (например World) ставить =null первый раз вижу такое требование/рекомендации ничего в документации нет?

    • @NightTrainCode
      @NightTrainCode  10 หลายเดือนก่อน +1

      Конечно, надо полагать, это мои старые видосы)

    • @denisgoodman4492
      @denisgoodman4492 10 หลายเดือนก่อน

      @@NightTrainCode Кстати Вы перешли на DOTS или по-прежнему в основном LeoECS & Murphy?

    • @NightTrainCode
      @NightTrainCode  10 หลายเดือนก่อน

      @@denisgoodman4492 Murphy?)
      Я сейчас Morpeh юзаю. Если Leo, то Proto, либо Lite

  • @SeempleIQ
    @SeempleIQ ปีที่แล้ว

    Я чего-то не понимаю, или ты наоборот, когда используешь ref: "ref a = ref filter.,Get1();" берешь структуру, запихиваешь ее в кучу, пораждаю аллокацию, вместо того, чтобы забрать копию структуры выделенную в куче не используя ref?

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      Если не использовать ref, то структура каждый раз будет копироваться и не будет передана по ссылке.
      Это значит, что изменения будут внесены в её КОПИЮ, а нам этого не надо

    • @SeempleIQ
      @SeempleIQ ปีที่แล้ว

      @@NightTrainCode На этом я сильно задумался. Если структуры лежат внутри класса(а это скорее всего так, т.к. их время жизни не внутри scope), то они уже находятся в куче, и с помощью ref ты не создаешь дополнительную копию в стеке, но тогда какой смысл от использования структур?

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      @@SeempleIQ Акт передачи объекта по ссылке не приводит к его перемещению в памяти из стека в кучу или наоборот

    • @NightTrainCode
      @NightTrainCode  ปีที่แล้ว

      @@SeempleIQ К тому же, мы не создаём мусор, когда создаём структуру с помощью new, в отличие от класса

  • @noob681
    @noob681 2 ปีที่แล้ว

    >using NTC.Global.Pool;
    Ты забыл добавить свой плагин к материалам из урока.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      Не)
      NightPool - это уже другая штучка 🌙

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      А хотя, похоже, что да. Спасибо, что сказал. В ближайшее время апдейт сделаю на гугл диске с найт пулом, а то он уже у меня был в проекте, где тестировал и не заметил ошибку 😬
      upd: пофиксил)

    • @noob681
      @noob681 2 ปีที่แล้ว +1

      @@NightTrainCode Бывает. Тебя нет в дискорд-сервере Leo? Пару дней назад принес твое видео назвав лучшим туториалом.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@noob681 Не-а, можешь кинуть его сюда или в личку вк)
      Ой, пасиба, засмущал 😅😊

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว

      @@noob681 Ещё превьюшки щас отреворкал на всех видосах, теперь про LeoECS у меня самый привлекательный видос в поиске 😄

  • @_VladMir_
    @_VladMir_ 2 ปีที่แล้ว

    "Сломать что то сложно " так же " не так поставил по порядку и всё сломал" и ничего тебе даже не скажет об этой ошибке XD

    • @Digildon
      @Digildon 2 ปีที่แล้ว

      обычно, без ecs часто можно поставить вызовы не по порядку и тебе ничего не скажет. (самое страшное что даже когда узнаешь, выставить вызовы в правильном будет геморройно, конечно зависит от архитектуры)

  • @testservicesssss
    @testservicesssss ปีที่แล้ว

    если ускорить в 10 раз то можно и за 2 минуты.

  • @KENISEG
    @KENISEG ปีที่แล้ว

    у меня голова заболела(

  • @mariacho8174
    @mariacho8174 2 ปีที่แล้ว +3

    Очень неудобный формат видео, просто какое-то мелькание кода..

  • @crwde
    @crwde 4 หลายเดือนก่อน

    Короче ненужно :|

  • @oldosgame
    @oldosgame 9 หลายเดือนก่อน

    да. надо было ускорить видео и сделать его таким образом ужасным для восприятия, чтобы добавить кликбейт "ECS за 20 минут". дизлайк

    • @NightTrainCode
      @NightTrainCode  9 หลายเดือนก่อน

      Я его не ускорял
      Поставь 1х и спасибо за активность)

    • @oldosgame
      @oldosgame 9 หลายเดือนก่อน

      @@NightTrainCodeвидео явно ускоренное. звуковая дорожка записывалась поверх него. это очень сильно заметно. можно было обойтись без кликбейта и за 40-60 минут объяснить толком, что к чему в этом ECS, а не проноситься "делаем это, это. все работает". аудитория у ролика совершенно иная, чем у дударя, поэтому, если уж взялся, нужно было раскрыть тему полностью. это претензия не конкретно к тебе, а к всем, кто так делает. а делают так практически все айтишники, мнящие себя крутыми преподавателями, думая, что все итак понятно

    • @NightTrainCode
      @NightTrainCode  9 หลายเดือนก่อน

      @@oldosgame Вам не лень тратить столько времени на критику моего ролика двухгодовалой давности? Видео не ускорено, но есть проблемы с подачей, прекрасно знаю. В новых видео всё намного и намного лучше :)

  • @dadlord689
    @dadlord689 2 ปีที่แล้ว +1

    Дибильная музыка на фоне, сленг который вообще не к месту (монобехи) - это настораживает. Автор наверное не понимает что делает. Материал сложный, а сама попытка провести аналогию между OOP и ECS - абсурдна. Это как как провести аналогию между птицей и самолётом (оба ж летают, только нужно немного прикрутить).

  • @xXSallamanderXx
    @xXSallamanderXx 2 ปีที่แล้ว +3

    Тараторишь с листочка, зажовываешь слова, выводит из себя.
    Складывается ощущение, что видос записан не для обучения, а для галочки, чтобы в резюме было.

    • @NightTrainCode
      @NightTrainCode  2 ปีที่แล้ว +1

      Пойду плакать в подушку, бро 😊

  • @HINCO38
    @HINCO38 9 หลายเดือนก่อน

    ты все еще считаешь лео ecs актуальным и удобным?

    • @NightTrainCode
      @NightTrainCode  9 หลายเดือนก่อน

      Classic удобный, но не актуальный. У LeoECS Lite ситуация лучше, но есть проблемы с производительностью, если мир разрастается. Я перешёл на Morpeh ECS

    • @crwde
      @crwde 4 หลายเดือนก่อน

      Короче опять ненужно 😅