Pull to refresh

Comments 9

А можно посмотреть в сторону ECS (не обязательно штатной реализации) и понять, что там это все реализуется даже проще.

:) если вам нравится парадигма ECS это не означает что большинству она проще и удобней. Кстати я так понимаю есть ECS фреймворк леопотам? )

Есть много реализаций, в том числе и моя. Есть Entitas, Svelto, EgoEcs и т.п. Смысл в том, что в случае ecs размазывание обработки последовательно с пре/пост-процессингом получается просто и непринужденно, без использования ООП.

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

Очень смелое и абсолютно голословное утверждение. Мое поделие как и Entitas не имеет никаких зависимостей от юнити и может использоваться в .net core безо всяких монобехов, например, в серверной реализации или вообще сторонних проектах (например, мод кастомных ранений для gta5). И да, джобы делаются через штатный мультитред без проблем.

Там наверху тэг Unity. Соответственно речь об этом. Как фреймворк работает вне Unity — отдельная песня. Теперь зайдем с другой стороны — можете ли вы утверждать что ваш фреймворк быстрее нативного ECS и даст результат лучше чем DOTS в целом?

Для начала можно пройтись по ссылкам, там есть тесты производительности. Ну и можно зайти с другой стороны — когда unity-ecs позволит передавать без адского бойлерплейта, занимающего треть кода, инстансы классов дальше для работы (после джобов и т.п) — вот тогда можно будет рассматривать ихнее поделие как рабочий вариант. Сейчас это — исключительно one-task-performance-only решение для ускорения одной задачи, из-за которой потом приходится страдать и выковыривать данные обратно из NativeArray и т.п. Все коммунити-проекты (тот же Entitas) являются multipurpose-решениями и позволяют строить всю архитектуру приложения на них.

Зашел из-за картинки, какая ностальгия.
Спасибо)
Я помню читал статью как для подобных вещей применялся паттерн Chain of Responsibilities. Там всё было просто: клепается куча блочков типа «броня», «физический урон», «магический урон», «усилитель от химии», «бафы класса персонажа» и т.д. Каждый блок принимает на вход и отдаёт на выход какое-то число (урона, хила, скорости). При каждой попытке воздействия игрока на что-то строится цепочка из нужных блоков, на вход ей даётся число — на выходе получается другое число. Всё. Элементарно добавляется всё, что угодно: заклинания, бафы от территории, времени дня, текущего игрового момента и т.д.
Sign up to leave a comment.

Articles