![]() |
LeoECS
Вложений: 2
Привет всем. Случайно вспомнил про булку, зашел и оказывается тут еще есть активность. :)
Вступление: В некоторых темах увидел тред где Crystal с "процедурными" знаниями Блитза в очередной раз пытается сделать свой фаллаут, но только уже на Юнити и как ему сложно. Увидел как Кирпи4 спрашивает, как новичку влиться в геймдев. И вспомнилось былое время, когда у меня тоже не было знаний, но было много вопросов и как сложно было раскуривать ооп. Но Самих ECS множество со своими плюсами, минусами и интеграцией в Юнити (DOTS/uECS). Но я напишу тут пример кода на LeoECS так как он максимально простой, позволяет делать "как хочешь" в отличии от DOTS/uECS, но при этом достаточно быстрый, изначально не привязан к Юнити и без кодогенерации как тот же Entitas. Что к чему: Краткая суть почему ECS это хорошо заключается в том, что практически не нужно уметь кодить, не нужно знать тонну паттернов и прочих сложностей. Все просто, как и в визуальном программировании, но только там соединяем ноды, а тут печатаем кусочки кода. Так же использование ECS идеально подходит для небольших игр на мобилки типа Match3, но и большие тоже можно писать. Сам ECS из себя представляет: World - "мир" в котором всё крутится System - системы, которые обрабатывают данные Entity - фактически контейнер, который содержит в себе компоненты Component - сам компонент представляющий собой структуру в которой храниться несколько значений. *собственно Entity и Component это тоже самое, что и в Юнити GameObject и Component. Ещё ECS можно представить просто как конвейер (World) по которому движутся коробки (Entity) в которых что-то лежит (Component), а рядом стоящие работники (System) берут эти коробки (Entity), что-то делают с ними или c их содержимым (Component), а затем или возвращают коробку (Entity) обратно на конвейер (World) или вовсе "выбрасывают в мусорку". Особенность всего этого в том, что System, Entity и Component ничего не знают друг о друге и вся магия происходит благодаря System.EcsFilter<T, ..>, который берет все Entity в текущем "мире", сортирует их по наличию запрашиваемых компонентов на них и возвращает пользователю грубо говоря массив с Entity. Ресурсы: Для начала нам нужно скачать ECS и два модуля к нему для связи с Юнити (это кстати единственная сложность в использовании стороннего ECS). LeoECS: https://github.com/Leopotam/ecs (тут так же есть краткая документация, ссылки на другие модули, ссылки на примеры кода и на некоторые игры сделанные на этом ECS) Unity integration: https://github.com/Leopotam/ecs-unityintegration (это нужно просто для дебага ECS в редакторе Юнити) Service Locator: https://github.com/Leopotam/globals (это фактически синглтон для вызова ECS из классов MonoBehaviour) Простой пример: После добавления ресурсов с гитхаба в Юнити нужно нажать правой кнопной мышки например на папку Assets и выбрать "Create > LeoECS > Create Startup template". Это создаст MonoBehaviour класс с инициализацией ECS. Данный юнити-компонент нужно добавить на игровой объект в сцене. PHP код:
Первая система называется у нас PlayerInitSystem. В ней мы создаем Entity и связываем с игроком на сцене. PHP код:
PHP код:
PHP код:
PHP код:
|
Ответ: LeoECS
Вложений: 1
А сейчас добавим возможность пострелять. Для этого создайте на сцене некоторое количество объектов с коллайдерами, которые будут являться препятствием для пули.
Так же нужно создать системы и добавить их в список в EcsStartup классе. PHP код:
Код очень похож на предыдущую систему где создавался компонент с событие движения игрока. Конечно системы можно унифицировать дабы они двигали сразу все Entity допустим с компонентом Move, но в этом случае мы потеряем гибкость и при отключении этой системы перестанут двигаться и игрок и пули. PHP код:
PHP код:
PHP код:
PHP код:
Всё. Выглядит это конечно более сложнее, чем классический код и синхронизация с игровыми объектами на сцене тоже такое себе. Но за то мы получаем максимально разграниченный функционал, который не зависит друг от друга. Так же это всё легко тестится и расширяется хоть до уровня ММО-игры. |
Ответ: LeoECS
Цитата:
Цитата:
Цитата:
|
Ответ: LeoECS
Цитата:
|
Ответ: LeoECS
Когда мне надоест программировать фоллауты, я возьму UE с его нодами.
Смысла перехода на LeoECS не вижу имхо. Так же можно было предложить на огре по кодить, по тому что "это другое", а смысл? ХЗ. Нужны более лёгкие варианты? - UE. |
Ответ: LeoECS
|
Ответ: LeoECS
Цитата:
Цитата:
На мобилках даже бессмысленное нечто под названием "гиперказуалки" с модельками а-ля 2002 год хавают за обе щеки. То есть будет и респект от игроков и может даже какой-то бабос. Цитата:
Но я всё же рекомендую попробовать LeoECS так как с этим очень просто кодить и фактически без ООП. По простоте получается тот же Блитз. |
Ответ: LeoECS
Цитата:
а так же сохранение, и загрузка. Дальше это всё переехало на хорс: А после я наработки по фоллауту использовал для прототипа RTS на хорсе с физиксом: Про игры на мобилки. Если мне удастся дотащить игру до релиза, если появится фанбаза, если я стану отечественным Кодзимой, то выпущу версию для мобилок. Если первый вариант не сработает, выпущу ремейк своего Unreal Racinga на мобилки с рекламой: |
Ответ: LeoECS
Цитата:
Но всё вот это "излишнее" и непонятное это профилактика тех проблем, которые возникнут, когда твой проект уже будет содержать огроменное количество связанных сущностей и изменение чего-то одного повлечёт за собой целый каскад правок. Не сочти за призыв к действию, просто пытаюсь рассказать что, почему и зачем. |
Ответ: LeoECS
Цитата:
Имхо любой программист смотря на свой старый код, видит что можно было по другому, и лучше. Но а мои спотыкания, это неопытность. Мой первый проект на юнити, первый на сишарпе, да ещё и чуть ли не триплэй уровня девяностых, и после 9-10 лет паузы в геймдеве. Сам понимаешь, не так то просто с разбегу влететь в это дело. В любом случае уже почти 10к строк кода, переноситься на другую платформу разработки (или недоплатформу) я уже не буду. Ну и собственно сложности существуют для того, чтобы их преодолевать. Я не просто разрабатываю, я обучаюсь. |
Ответ: LeoECS
Цитата:
Методика "Всё круто, но переделывай" хорошо катит для детей и бессмертных. |
Ответ: LeoECS
Цитата:
Да и программист, который хочет кушац за счёт своих писулек тоже. |
Часовой пояс GMT +4, время: 20:45. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot