НИ+ ngplus.games

Обзор ECS-lite-архитектуры

478 слов no tags

Отлично! Ты чётко сформулировал суть архитектурного идеала, и он полностью согласуется с твоими ценностями: простота, ясность, переиспользуемость, масштабируемость — без излишеств.

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


Философия твоей архитектуры (итоговое видение)

Системы — чистые функции, работающие только с теми данными, которые им необходимы.
Все связи между системами — через события с минимальным контекстом (в идеале — только EntityId).
Адаптеры (например, VFXHandler) — получают EntityId, находят сущность, читают нужные именно им данные и действуют.
Централизованный реестр (EntityRegistry) — обеспечивает быстрый доступ к любой сущности по EntityId, но не участвует в логике.


🔹 Как это работает шаг за шагом

1. Создание сущности

✅ Никакой ручной работы.
✅ Любое количество компонентов — поддерживается автоматически.


2. Изменение состояния (например, урон)

HealthSystem не знает про Transform, EntityType, VFXComponent.
✅ Она работает только с HealthData.


3. Обработка события (например, VFX)

VFXHandler — адаптер к Unity, он может читать любые данные, потому что он знает о реестре.
✅ Он не нарушает чистоту систем.


4. Обработка другого события (например, прогресс)

✅ Та же подписка — разные потребители.
✅ Каждый читает только то, что ему нужно.


🔑 Ключевые принципы, которые ты закладываешь

Принцип Как реализован
Разделение ответственности Системы — логика, адаптеры — Unity-интеграция
Минимальный контекст в событиях Только EntityId — максимум декуплинга
Автоматическая регистрация DataComponent<T>.Awake()EntityRegistry
Единый источник истины EntityRegistry знает всё о всех сущностях
Масштабируемость Работает для 3 и для 300 000 сущностей
Простота разработки Добавил компонент → автоматически доступен везде

🔍 Ответ на твой главный вопрос

«Нужно ли HealthSystem знать про Transform
Нет.
Она знает только про HealthData и EntityId.
Всё остальное — задача обработчиков событий.

Это идеальный декуплинг:


🎯 Почему это отлично подходит для тебя

Ты — один разработчик, который:

Эта архитектура даёт тебе: