Saltar a contenido

Composición, entidades y ECS

Un error típico del modelo orientado a objetos es construir jerarquías cada vez más profundas para combinar capacidades: FlyingMonster, FlyingPoisonMonster, FlyingPoisonBoss y así sucesivamente. La composición permite que cada entidad reúna piezas reutilizables.

Tres enfoques

Modelo Conveniente cuando Costes
Objetos tradicionales Pocas entidades y relaciones claras Herencia frágil ante combinaciones
Actor + componentes Capacidades y ciclo de vida heterogéneos Wiring, mensajes, responsabilidades
ECS / Data-Oriented Muchas entidades con procesamiento homogéneo Indirección, restricciones de datos y depuración

En una arquitectura actor-component, un NPC puede tener Health, Inventory, Movement y AI. En ECS, los componentes suelen ser principalmente datos; los sistemas recorren entidades que cumplen consultas sobre componentes y, en implementaciones arquetípicas, optimizan la localidad de memoria.

No son equivalentes: componente de motor, componente ECS y nodo ejecutable de un grafo de comportamiento son conceptos distintos aunque compartan la idea de composición.

Elegir por necesidades verificables

Un simulador con miles de agentes y actualizaciones homogéneas puede beneficiarse de ECS desde temprano. Un juego narrativo con pocas entidades complejas quizás se beneficie más de objetos, componentes y modelos especializados de relaciones.

No hay que poner todo en ECS. La economía, el diálogo y las redes de relaciones sociales pueden necesitar modelos diferentes. Un diseño híbrido puede reservar ECS para movimiento, físicas o necesidades masivas.

Cómo evolucionar sin reescribir

Primero identificá capacidades y datos propios. Separá estado mutable de definiciones. Cuando el procesamiento de muchos objetos se vuelve el cuello de botella, medí caches, iteraciones, asignaciones y memoria antes de cambiar la estructura de almacenamiento.

Antipatrón

Crear un sistema global para cada propiedad diminuta sin una razón de escalabilidad puede volver una operación simple imposible de seguir. En sentido opuesto, permitir que cada entidad ejecute lógica pesada libremente puede hacer incontrolable el coste de un mundo extenso.

Relacionado: Estado del mundo, definiciones e identidad, Gameplay dirigido por datos y comportamientos declarativos, Probar la simulación y medir antes de optimizar, Módulos de gameplay y contratos.

Fuentes: Game Programming Patterns — Component, Unity Entities, Unreal MassEntity.


Mencionado desde