Pull to refresh

Comments 8

Все таки ECS делает всю игровую логику в несколько раз сложней для понимания

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

Как раз благодаря слабой связности непонятно, что происходит. Плюс ECS всегда создает большое количество бойлерплейт кода.

Что именно непонятно? По-моему, все просто. Весь список систем, выполняющихся друг за другом, можно просмотреть в стартап-классе Game. Они друг о друге не знают, коммуникация между разными частями проекта происходит через данные в компонентах и сущности. Как раз эта слабая связанность дает модульность и в итоге легче рефакторить код, изменяя или добавляя новые механики. Также проще смешивать разное поведение с помощью разных наборов компонентов. События тоже проще обрабатывать – просто создаешь сущность с нужным компонентом и ловишь в системе. Сами системы можно легко разделить на несколько или наоборот объединить.

Все, что плохо ложится на ECS (иерархические структуры, например), можно реализовать через сервисы и инжектнуть в системы.

Насчет бойлерплейта - зависит от фреймворка. В LeoECS Lite с расширениями не так уж и много.

ECS навязывает очень определенный подход к архитектуре, который подходит к некоторым видам игр вроде RTS, но плохо подходит ко всему остальному.
Вот про иерархические структуры например хорошо сказано, а они в более-менее крупной игре составляют большую часть игровой логики.
То что подсистемы друг о друге не знают, это не так уж и хорошо, потому что придется продумывать комплексную логику их взаимодействия, чтобы это потом не развалилось.
Ну да, в теории на простых примерах можно легко добавлять и удалять разные подсистемы, но в реальной разработке все опять окажется завязано друг на друга, только теперь еще с неявной логикой взаимодействия.
На мой взгляд ECS подход можно использовать только в целях оптимизации и только для некоторых критичных подсистем, а не для всей логики.

"ECS навязывает очень определенный подход к архитектуре, который подходит к некоторым видам игр вроде RTS, но плохо подходит ко всему остальному." - по моему мнению, он нормально подходит к совершенно разным проектам, у меня есть опыт использования ECS с разными играми: и с гк, и с шутерами, и с ртс, и с данжн кроулерами. В крупных проектах по типу Overwatch, Minecraft и, насколько я знаю, в играх от Larian тоже используют этот подход для игровой логики, а это не RTS игры.

Pathfinding, ИИ через граф (FSM/BT/DT/GOAP/etc), UI и другие иерархии - это все можно реализовать отдельными сервисами с нужным API и использовать его внутри систем.

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

Всё отлично, но возможно всё таки стоило подекомпозить логику в отдельные методы, для улучшения читаемости, фигачить всё в Run или Update такое себе.

Sign up to leave a comment.

Articles