🎮 UnityDocs

Introducción a DOTS y ECS

Qué es DOTS y su arquitectura ECS (Entity Component System), por qué permite decenas de miles de objetos, en qué se diferencia del Unity clásico (GameObjects) y —lo más importante— cuándo NO deberías usarlo.

📄 ArtículoAvanzado✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 8 min

Qué es DOTS#

DOTS (Data-Oriented Technology Stack) es un conjunto de tecnologías de Unity para lograr un rendimiento extremo con muchísimos objetos. Se apoya en tres pilares:

  1. ECS (Entity Component System): una forma distinta de organizar los datos y la lógica.
  2. C# Job System: multihilo seguro.
  3. Burst: compilación ultra rápida.

La idea central es la orientación a datos: colocar los datos en memoria de forma que la CPU los procese a máxima velocidad (aprovechando la caché), en vez de saltar por objetos dispersos.

ECS vs GameObjects#

El Unity clásico que has aprendido usa GameObjects + Componentes (MonoBehaviour). ECS le da la vuelta:

⚖️ Comparativa · GameObject/MonoBehaviour vs ECS
GameObject + MonoBehaviourECS
UnidadGameObject (objeto)Entity (solo un id)
DatosCampos en componentesComponents (structs puros de datos)
LógicaMétodos en el MonoBehaviourSystems (procesan todas las entidades de un tipo)
En memoriaObjetos dispersos (heap)Datos empaquetados y contiguos
Escala cómodaCientos–milesDecenas de miles–millones
FacilidadAltaBaja (otra forma de pensar)

En ECS, una entidad es casi solo un identificador; sus datos son components (structs), y la lógica vive en systems que recorren todas las entidades que tienen ciertos components. Los datos del mismo tipo se guardan juntos y contiguos (por archetypes), lo que la CPU adora.

Por qué es tan rápido#

El secreto: la caché de la CPU

El cuello de botella moderno no suele ser calcular, sino esperar a que lleguen los datos de la memoria. Los GameObjects están dispersos por el heap: la CPU salta de uno a otro y espera. ECS empaqueta los datos del mismo tipo juntos y contiguos, así la CPU los procesa en ráfaga, sin esperas, y encima en paralelo con Jobs y compilado con Burst. De ahí los saltos de rendimiento con escalas enormes.

Un vistazo al código (para que te suene)#

C#
using Unity.Entities;
using Unity.Mathematics;

// Un component = datos puros (struct)
public struct Velocidad : IComponentData
{
    public float3 valor;
}

// Un system procesa TODAS las entidades con esos datos
public partial struct MovimientoSystem : ISystem
{
    public void OnUpdate(ref SystemState state)
    {
        float dt = SystemAPI.Time.DeltaTime;
        foreach (var (transform, vel) in
                 SystemAPI.Query<RefRW<LocalTransform>, RefRO<Velocidad>>())
        {
            transform.ValueRW.Position += vel.ValueRO.valor * dt;
        }
    }
}

No te preocupes si se ve raro: es otra forma de pensar, y esa es exactamente la cuestión.

Cuándo usar DOTS (y cuándo NO)#

DOTS no es 'Unity mejor': es Unity distinto

Adoptar DOTS tiene un coste alto: curva de aprendizaje empinada, otra mentalidad, menos ejemplos, y mezclarlo con el flujo clásico es incómodo. La mayoría de juegos no lo necesitan. Un plataformas, un shooter normal, un puzzle o un juego móvil típico van perfectos con GameObjects bien optimizados.

🧭 ¿Qué debería usar?
  • ¿Decenas de miles de unidades a la vez (RTS masivo, simulaciones, bullet-hell extremo)? → DOTS/ECS puede valer la pena
  • ¿Rendimiento de CPU al límite y ya exprimiste lo básico y Jobs? → considéralo
  • ¿Juego normal (cientos/miles de objetos)? → GameObjects optimizados; DOTS sería sobreingeniería
  • ¿Estás aprendiendo Unity? → no empieces por DOTS; domina primero el flujo clásico

Estado y madurez#

DOTS ha ido madurando por paquetes (Entities, Entities Graphics...). En Unity 6 es más usable que hace años, pero sigue siendo terreno avanzado y en evolución. Puedes usar partes (solo Jobs + Burst sobre GameObjects) sin adoptar ECS entero: a menudo es el mejor equilibrio.

Errores frecuentes#

  • Adoptar DOTS "porque es más rápido" en un juego que no lo necesita (coste enorme sin beneficio).
  • Empezar a aprender Unity por ECS (salta el flujo clásico y te pierdes).
  • Esperar mezclar ECS y GameObjects sin fricción.
  • Creer que DOTS arregla problemas que en realidad eran basura del GC o draw calls.

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

DOTS = orientación a datos con tres pilares: ECS (entidades = id, components = datos, systems = lógica), Jobs y Burst. Empaqueta datos contiguos para exprimir la CPU y escalar a decenas de miles de objetos. Pero es otra mentalidad, avanzada y en evolución: la mayoría de juegos no lo necesitan. Úsalo solo para escala masiva real, y valora usar solo Jobs+Burst sobre GameObjects como término medio.

Fuentes y para profundizar