- Zenject
- UniTask
- Addressables
- R3(Rx)
- PrimeTween (самый производительный)
ECS не стал использовать так как задача была сделать простую архитектуру, в случае с ECS не каждый разработчик знает этот подход.
Так же не стал использовать Jobs и Burst, так как выгода будет крайне мала, при текущем количестве сущностей.
Мини прототип на ECS описание ТЗ было доработано. Видео геймплея
По оптимизации было предпринято:
- Addressables
- пулы объектов
- настроена матрица коллизий
- минимизированы апдейты
- убран копонент аниамции с кристала в пользу кодовой анимации.
- кеширование данных
- минимизированы аллокации
- убраны меш коллайдеры, где они не нужны.
В проекте намерено используется несколько подходов для реализации игровых сущностей:
- попроще, что поймут аж самые юные разработчики (реализация юнитов)
- другой вариант тоже простой, но нужны уже знания DI (реализация башен)).
Классические варианты реализации ИИ так же не стал применять.
В этом репозитории FPS, например реализация ИИ через Behaviour Tree
Мне больше импонирует Data oriented design, последнее время как раз его и использую, так как очень легко в рантайме добавлять новое поведение или новые данные игровым сущностям, а в играх как раз очень часто объекты это требуют. В этом помогает процедурное и реактивное программирование.
В проект добавлены несколько модулей, которые часто мигрируют по проектам:
- Жизненный цикл игры (zenject специально подредактирован чтобы вклиниться в зенжектовские апдейты)
- Дерево загрузки (чёткий пайплайн загрузки приложения важен)
- Менеджмент ассетов
Интеграция модулей практически не занимает времени. Простые в использовании.