unity dots
Back to top

Unity DOTS: what it is and when to use it in production

Dmytro Lunov

Written by

Dmytro Lunov Verified author

Head of Delivery and Program Director at Game-Ace

Dmytro leads Game-Ace delivery teams on game development, art production, game design, MVP prototyping, and Unity and Unreal Engine projects.

Published October 28, 2019 Updated September 9, 2026

Unity DOTS, short for Data-Oriented Technology Stack, is Unity's high-performance path built on Entities (ECS), the C# Job System, and the Burst compiler. Production teams pick Unity DOTS when a project must simulate tens of thousands of active agents, physics bodies, or projectiles at stable frame rates on mobile or desktop hardware, where classic MonoBehaviour hits a wall.

Why Unity DOTS exists: cache-friendly data and multi-core CPUs

Classic Unity code stores gameplay state inside MonoBehaviour objects scattered across managed heap memory. Every Update call chases pointers across the heap, thrashes the CPU cache, and runs on a single main thread. Unity DOTS flips that layout: data lives in tight contiguous chunks per archetype, code runs as jobs across worker threads, and Burst compiles the hot path to native SIMD instructions.

The practical outcome is a shift from "a few hundred active objects" to "tens of thousands" on the same device, provided the systems are written in the DOTS style.

Scoping a simulation-heavy Unity title or evaluating a Unity DOTS migration?

Entities: the ECS core of the Data-Oriented Technology Stack

Entities is the ECS package that carries the Data-Oriented Technology Stack. An entity is an integer id, a component is a plain data struct, and a system is a job that iterates over entities with a matching set of components. Archetypes group entities with identical component layouts into contiguous chunks, which is what makes iteration cache-friendly.

Entities 1.0 stabilized in 2023 and shipped with a maintained API surface, baking pipeline, and subscene workflow. Unity 6 ships Entities 1.3 with better editor tooling and clearer upgrade rules for teams already on the 1.x line.

The Burst compiler: native performance for C# jobs

Burst is an ahead-of-time compiler that turns a restricted subset of C# into native code with SIMD vectorization. In practice it gives math-heavy jobs performance close to hand-written C++ without leaving the C# codebase.

Burst is production-ready and used well beyond DOTS itself. It powers parts of Unity Physics, the Animation C# Jobs API, and any custom IJob implementation that opts into the [BurstCompile] attribute. For a Unity DOTS project, Burst is not optional. Without it, ECS systems lose most of their advantage over classic MonoBehaviour code.

The C# Job System: safe multithreading for gameplay code

The C# Job System is Unity's safe way to run gameplay code across worker threads. It uses the Burst-friendly Native Collections and a static safety system that flags data races at compile time, not at runtime.

Inside Unity DOTS, every ECS SystemBase or ISystem naturally schedules its work as jobs. Outside DOTS, the same Job System can be used to parallelize particle updates, procedural mesh generation, pathfinding, or AI evaluations without touching Entities at all.

DOTS Physics versus classic PhysX in Unity

Unity ships two physics engines. Classic Unity Physics uses PhysX, is fully deterministic per-machine but not across machines, and lives on MonoBehaviour Rigidbody and Collider components. Unity Physics for Entities ("DOTS Physics") is stateless, deterministic across machines when configured correctly, and designed to scale to thousands of active bodies via jobs and Burst.

For simulation-heavy multiplayer, RTS, or crowd systems, DOTS Physics is a strong fit. For a linear single-player title with a few dozen rigidbodies, PhysX remains the simpler choice. Havok Physics for Unity offers a higher-fidelity stateful option on top of the same Entities data.

Netcode for Entities: high-scale multiplayer, with caveats

Netcode for Entities is Unity's ECS-based multiplayer package. It uses a server-authoritative model with client-side prediction and snapshot interpolation, built directly on Entities and jobs so that the network loop stays inside the DOTS performance envelope.

As of the Unity 6 LTS cycle, Netcode for Entities is still marked experimental. For production shooters, RTS, or MMO prototypes it is usable, but teams should expect API changes between minor versions and budget for netcode-specific QA rather than treating it as a drop-in replacement for Netcode for GameObjects.

URP and Entities Graphics: rendering the DOTS world

Entities Graphics, formerly Hybrid Renderer, is the package that draws ECS entities on screen. It integrates with the Universal Render Pipeline (URP) and supports instanced rendering, LOD, skinning, and lightmaps for entity-based content.

HDRP support exists but is narrower in scope, so most Unity DOTS titles ship on URP. For mobile and mid-range PC hardware this is the right pick anyway, since URP is where Unity focuses graphics performance work on those platforms.

When to use Unity DOTS versus classic MonoBehaviour

Pick Unity DOTS when the project's core loop is simulation-bound: tens of thousands of active agents, projectiles, particles, physics bodies, or grid cells that must update every frame. Typical fits are RTS, autobattlers, city-builders, tower defense at large scale, crowd simulations, bullet-hell shooters, and server-side simulation for competitive multiplayer.

Stay on classic MonoBehaviour when the game is content-heavy but not simulation-heavy: narrative titles, most third-person adventures, casual mobile puzzlers, hidden object games. The MonoBehaviour authoring workflow is faster, the asset store ecosystem is richer, and the performance ceiling is high enough for those genres.

A hybrid setup is common in practice. Gameplay logic that fits ECS runs as Entities, while UI, cutscenes, and authoring tools stay on MonoBehaviour. Entities and GameObjects can coexist in the same scene through subscenes and companion components.

MonoBehaviour + PhysX vs DOTS Entities + DOTS Physics

The table below summarizes how the two stacks compare for a production team scoping a new Unity project.

AspectMonoBehaviour + PhysXDOTS Entities + DOTS PhysicsBest fit
Active object budgetHundreds to a few thousandTens of thousands, sometimes 100k+DOTS for large-scale sims
CPU modelSingle main thread, GC-heavyMulti-core jobs, Burst-compiled, no GC in hot pathDOTS for CPU-bound titles
Authoring speedFast, drag-and-drop inspectorSlower, subscenes and baking pipelineMonoBehaviour for small teams
Physics determinismDeterministic per-machine onlyDeterministic across machines when configuredDOTS for lockstep multiplayer
Learning curveFamiliar to most Unity devsData-oriented mindset, new API surfaceMonoBehaviour for fast onboarding

Performance orders of magnitude teams should expect

Public Unity samples and independent benchmarks converge on similar orders of magnitude. A boid simulation that peaks around 3-5 thousand agents on MonoBehaviour can run 50-100 thousand agents on Unity DOTS on the same mid-range desktop CPU, because the work is spread across cores and the inner loop runs Burst-compiled SIMD code.

Physics scales similarly. DOTS Physics can simulate 10-20 thousand active rigid bodies where PhysX starts dropping frames around 1-2 thousand. Numbers vary by scene complexity, collision layer setup, and CPU, so treat these as rough guides, not guarantees. Any real project should benchmark its own worst-case scene before locking the stack.

Migration paths from MonoBehaviour to Unity DOTS

Full migration of an existing MonoBehaviour codebase to Entities is rarely the right call. The realistic path is incremental. Identify the systems that are CPU-bound, port those to Entities and jobs, and leave the rest on MonoBehaviour.

A typical order looks like this:

Migration order

  • Introduce the C# Job System and Burst for the heaviest MonoBehaviour Update loops first.
  • Port a single self-contained simulation system to ECS through a subscene.
  • Move physics-heavy actors to DOTS Physics once the ECS system is stable.
  • Migrate networking to Netcode for Entities only after the single-player simulation is stable and the team has ECS experience.

This order keeps the game shippable at every step and avoids the rewrite-then-pray pattern that has killed more than one DOTS migration.

Production caveats teams should plan for

Unity DOTS is production-ready for its core (Entities, Burst, Job System, DOTS Physics) but the surrounding ecosystem is thinner than classic Unity. Asset store coverage is smaller, third-party tool integrations sometimes lag a version behind, and hiring engineers with real ECS shipping experience takes longer than hiring generalist Unity devs.

Debugging is different too. Entities Journaling and the Entities Hierarchy window help, but stack traces jump through baking, systems, and Burst-compiled code in ways that new team members find disorienting for the first few weeks. Plan onboarding time, code reviews for cache-unfriendly patterns, and a shared style guide before scaling the team on ECS work.

When to talk to Game-Ace about Unity DOTS

Unity DOTS work is where a data-oriented mindset, ECS experience, and honest scoping matter more than raw Unity hours. Game-Ace has been shipping Unity titles since 2005 with a 120+ in-house team, so a DOTS conversation can start with an architecture review of the intended core loop, an honest read on whether Entities is the right pick, and a phased plan if it is. When Unity is part of your roadmap, Game-Ace, a custom Unity game development studio, covers full-cycle delivery, co-development, and team extension from a single team. See our Unity game development and hire Unity developers pages, plus the Unity for game development and Unity 6 guides.

Frequently searched questions about Unity DOTS

Pick Unity DOTS when the core loop needs to simulate tens of thousands of active agents, projectiles, or physics bodies every frame on the target hardware. Typical fits are RTS, autobattlers, crowd sims, bullet-hell shooters, and server-side simulation for competitive multiplayer. For narrative or content-heavy titles, MonoBehaviour is still faster to author and ships fine.

The core of the Data-Oriented Technology Stack is production-ready. Entities 1.x, Burst, the C# Job System, and Unity Physics for Entities are stable and used in shipped titles. Netcode for Entities is still marked experimental in the Unity 6 LTS cycle, so multiplayer projects should plan for API drift and extra QA on the netcode layer.

Expect four to eight weeks before an experienced Unity team is comfortable shipping ECS code. The syntax is familiar C#, but the mental model is different: data lives in chunks, systems iterate over archetypes, and there is no GameObject to reach for. Teams that already understand cache-friendly data layout and multithreading adapt faster than teams that have never left MonoBehaviour.

Unity DOTS is often a stronger fit on mobile than on desktop, because mobile CPUs are the tightest budget in the project. Burst-compiled jobs let a mid-range Android device run simulation counts that would otherwise force scope cuts. The caveat is memory: ECS chunks are efficient but need careful archetype design, and mobile GPU limits still cap what the renderer can draw.

Yes, with eyes open. Netcode for Entities is used in shipped and soft-launched titles, but it is still labelled experimental and the API changes between minor versions. Teams that pick it should pin package versions, invest in netcode-focused automated tests, and budget for at least one non-trivial API migration during the project.

Harder, and the market knows it. The pool of engineers who have shipped ECS gameplay is a fraction of the general Unity pool, so hiring cycles are longer and rates are higher. Many studios solve this by pairing one senior DOTS engineer with mid-level Unity generalists who ramp on ECS during the project, or by bringing in an outsourcing partner with existing DOTS delivery experience.

Migration cost depends on which systems move, not on total code volume. A typical incremental migration adds one to three months of senior engineering time to introduce Burst and the Job System into hot MonoBehaviour paths, then two to four months per major system ported to ECS. Full-project rewrites into Entities are rarely worth the cost and are usually avoided in favor of a hybrid setup.

Yes, and most shipping DOTS titles run in this hybrid mode. Simulation-heavy systems live as Entities inside subscenes, while UI, cutscenes, tooling, and slower gameplay stay on MonoBehaviour. Companion components and baking bridges keep the two worlds in sync. This split lets teams get DOTS performance where it matters without paying the authoring cost across the whole game.
Average rating 4.8 / 5. Votes: 637
Related posts
Corporate retrospective 2025 game ace preview Game-Ace’s 2025 year in review: key achievements and highlights Corporate retrospective 2024 in review game ace preview Game-Ace’s 2024 year in review:
key achievements and highlights
Unity 6 preview img Unity 6 for game development: what actually changed Gamescom blog preview Game-Ace gears up to participate at Gamescom 2024 Nordic game 2024 game ace preview img Game-Ace participated in Nordic Game 2024
Futuristic game robot running through a purple portal
Get in touch
menu
Get in touch
Game-Ace logo loader