Skip to content
Back to skills

Unity Dots

ASecurity

Unity DOTS — Entities 1.x, Burst-compiled jobs, IJobChunk / IJobEntity, NativeArray / NativeList, SystemBase vs ISystem, baking GameObject to entity, hybrid components. USE WHEN: massive entity counts (RTS, swarms, particles-as-entities), data-oriented refactor of hot simulations, deterministic netcode targets, Burst-friendly math. DO NOT USE FOR: regular GameObject gameplay (use `unity-core`); rendering (DOTS uses Entities Graphics — link from `unity-rendering`); networking with NGO (use `...

  • 31 stars
  • 0 votes
  • 0 copies
  • 9 views
  • Added September 8, 2026
ai-agentsgoapi

Works with

  • api

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill unity-dots --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unity Dots?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unity Dots
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-unity-dots/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-unity-dots)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: unity-dots
description: |
  Unity DOTS — Entities 1.x, Burst-compiled jobs, IJobChunk / IJobEntity,
  NativeArray / NativeList, SystemBase vs ISystem, baking GameObject to
  entity, hybrid components.

  USE WHEN: massive entity counts (RTS, swarms, particles-as-entities),
  data-oriented refactor of hot simulations, deterministic netcode targets,
  Burst-friendly math.

  DO NOT USE FOR: regular GameObject gameplay (use `unity-core`); rendering
  (DOTS uses Entities Graphics — link from `unity-rendering`); networking
  with NGO (use `unity-netcode`).
allowed-tools: Read, Grep, Glob, Write, Edit
---

# Unity DOTS / ECS (Entities 1.x)

## When (and when not)

DOTS shines with **lots of similar things** doing **lots of similar work**: 10k+ units, particle-as-entity sim, deterministic physics for netcode. For typical character-based gameplay (a player, ~10 enemies, UI) classic GameObjects + MonoBehaviour are simpler and fast enough.

Mixing both: hybrid mode — GameObjects for hero/UI, ECS for swarms.

## Components

```csharp
public struct Position : IComponentData { public float3 Value; }
public struct Velocity : IComponentData { public float3 Value; }
public struct Health   : IComponentData { public float Value; }
public struct Enemy    : IComponentData {} // tag

public struct Inventory : IBufferElementData {     // dynamic buffer
    public Entity Item;
    public int    Count;
}
```

All `IComponentData` are blittable structs (no reference types directly).

## Systems — ISystem (preferred over SystemBase for Burst)

```csharp
[BurstCompile]
public partial struct MoveSystem : ISystem {
    public void OnUpdate(ref SystemState state) {
        float dt = SystemAPI.Time.DeltaTime;
        new MoveJob { DeltaTime = dt }.ScheduleParallel();
    }
}

[BurstCompile]
public partial struct MoveJob : IJobEntity {
    public float DeltaTime;
    void Execute(ref Position pos, in Velocity vel) {
        pos.Value += vel.Value * DeltaTime;
    }
}
```

`partial struct` lets Unity generate the iteration boilerplate at compile time.

## Querying

```csharp
foreach (var (transform, velocity) in
         SystemAPI.Query<RefRW<Position>, RefRO<Velocity>>().WithAll<Enemy>()) {
    transform.ValueRW.Value += velocity.ValueRO.Value * dt;
}
```

`RefRW` = read/write, `RefRO` = read-only (better job scheduling).

## Baking — GameObject → Entity

```csharp
public class EnemyAuthoring : MonoBehaviour {
    public float Speed;
}
public class EnemyBaker : Baker<EnemyAuthoring> {
    public override void Bake(EnemyAuthoring authoring) {
        var e = GetEntity(TransformUsageFlags.Dynamic);
        AddComponent(e, new Velocity { Value = new float3(0, 0, authoring.Speed) });
        AddComponent<Enemy>(e);
    }
}
```

Designers tweak in Inspector; baking turns Authoring components into Entity components at subscene conversion time.

## Sub Scenes

Big static worlds → put in a SubScene asset, baked offline → loaded by streaming. Smaller content/dynamic spawning → spawn at runtime via `EntityManager.CreateEntity`.

## Anti-patterns

| Anti-pattern | Fix |
|---|---|
| Storing Entity references in `class` MonoBehaviour | Use bridge ScriptableObject + lookup, or hybrid component |
| `EntityManager.CreateEntity` per frame from main thread | Use `EntityCommandBuffer.ParallelWriter` from a job |
| Mixing managed types in IComponentData | Use `IComponentData` blittable + companion class component if absolutely needed |
| Forgetting Burst attribute | `[BurstCompile]` on systems & jobs — verify in Burst Inspector |
| Heavy `EntityQuery` per frame | Cache via `state.GetEntityQuery` in OnCreate |

## Production checklist

- [ ] DOTS used only where it beats GameObject perf measurably
- [ ] All hot systems Burst-compiled
- [ ] EntityCommandBuffer used for structural changes
- [ ] SubScenes for static content
- [ ] Authoring components reviewed by designers
- [ ] Determinism verified if ECS feeds netcode

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…