name: unity-dots
description: Index of 96 senior-level Unity DOTS/ECS skills mined from EntityComponentSystemSamples — covering entities, jobs, Burst, physics, netcode, baking, and transforms. Read ROUTING.md first to locate the right sub-skill. Do NOT load this index file as a standalone skill.
use-when: |
Load for unity-dots-dev agent to navigate to the correct DOTS sub-skill.
Use ROUTING.md inside this pack to select the specific sub-skill needed for the task.
do-not-use-when: |
Do not load the index as a standalone skill — use sub-skills via ROUTING.md instead.
Do not load for unity-dev (classic lane), tester, verifier, or non-DOTS tasks.
platforms: [claude-code, codex, copilot, cursor, windsurf]
task-categories: [ecs, reference, samples, dots]
metadata:
source: https://docs.unity3d.com/Packages/com.unity.entities@1.3
version: 1.3.8
tier: 1
Unity DOTS Skill Pack — Index
96 senior-level skills. Entities 1.4.x. Source: Unity-Technologies/EntityComponentSystemSamples.
Fast path: Read ROUTING.md first — match task keywords to a scenario, load 2–3 skills directly.
Slow path: Use the keyword column below to find relevant skills, then load by name.
ECS Fundamentals
| Skill |
Keywords |
icomponentdata-value-component |
IComponentData, blittable struct, chunk layout, RefRO, RefRW |
tag-component |
tag component, zero-size, feature flag, marker component |
isystem-burst-compile |
ISystem, SystemBase, [BurstCompile], BurstDiscard, unmanaged system, bridge system |
systemapi-query-main-thread |
SystemAPI.Query, foreach, RefRW, RefRO, WithAll, WithNone, WithEntityAccess |
require-for-update-gate |
RequireForUpdate, prerequisite gate, feature flag, ExecuteXxx |
singleton-access |
GetSingleton, GetSingletonRW, config, registry, input state |
system-update-order |
UpdateInGroup, UpdateBefore, UpdateAfter, execution order |
world-system-filter |
World filter, WorldFlags, disable system, world-specific |
cross-entity-lookup |
ComponentLookup, BufferLookup, GetComponent, HasComponent |
fixed-step-simulation |
FixedStepSimulationSystemGroup, fixed timestep, deterministic |
managed-component-bridge |
managed IComponentData, UnityEngine.Object, bridge, MonoBehaviour ref |
Baking & Authoring (Wave 2)
| Skill |
Keywords |
baker-authoring-conversion |
Baker, GetEntity, AddComponent, IBaker, authoring MonoBehaviour |
baker-depends-on |
DependsOn, baker dependency, incremental bake trigger |
baking-system |
BakingSystem, post-baking pass, baking world |
baking-type-component |
BakingType, bake-only component, editor-only data |
baking-type-cleanup-component |
BakingType + cleanup, bake-and-remove pattern |
baking-world-query-options |
EntityQueryOptions.IncludePrefab, IncludeDisabledEntities, baking query |
blob-asset-in-baker |
BlobAssetReference, blob builder, immutable baked data |
blob-asset-deduplication |
blob dedup, BlobAssetStore, identical blob sharing |
entity-prefab-reference |
prefab entity, baker prefab, Entity reference, instantiate |
multi-entity-baker |
CreateAdditionalEntity, multi-entity, baker child entities |
temporary-baking-type |
temporary baking component, bake-only lifetime |
transform-usage-flags |
TransformUsageFlags, Dynamic, Renderable, ManualOverride, None, archetype bloat |
auto-authoring |
auto-authoring, simplified baker, zero-config conversion |
Entity Command Buffer (Wave 3)
| Skill |
Keywords |
entity-command-buffer |
ECB, EntityCommandBuffer, deferred, Playback, BeginSimulation |
ecb-system-timing |
ECB playback timing, BeginSimulationECB, EndSimulationECB, when playback fires |
ecb-parallel-writer |
ECB.ParallelWriter, parallel structural change, ChunkIndexInQuery sort key |
ecb-manual-immediate |
manual ECB, immediate playback, ECB.Dispose, owned ECB |
ecb-multiplayback |
multi-playback ECB, reuse ECB, PlaybackPolicy.MultiPlayback |
direct-entity-manager-structural-changes |
EntityManager, sync point, main thread structural change |
structural-change-cost-model |
archetype churn, structural change cost, batch vs deferred |
batch-structural-change-on-query |
batch structural, AddComponentMatchingEntities, query-batch |
toentityarray-snapshot-pattern |
ToEntityArray, snapshot, structural change during iteration |
icleanupcomponentdata-runtime |
ICleanupComponentData, two-phase teardown, orphan entity, DestroyEntity |
Jobs & Native Containers (Wave 4)
| Skill |
Keywords |
ijobentity-parallel-job |
IJobEntity, Schedule, ScheduleParallel, job query |
ijobchunk-chunk-job |
IJobChunk, Execute chunk, ArchetypeChunk, chunk iteration |
job-dependency-chain |
state.Dependency, JobHandle, chain, dependency propagation |
wave4-ijobentity-advanced-patterns |
IJobEntity WithAll WithNone, ChunkIndexInQuery, EntityIndexInQuery |
wave4-ijobchunk-full-anatomy |
IJobChunk full, GetNativeArray, chunk components, useEnabledMask |
wave4-ijob-single-thread-offload |
IJob, single-threaded job, off main thread, background work |
wave4-ijobparallelfor-array-transform |
IJobParallelFor, array transform, per-index parallel |
wave4-burst-compilation-contract |
Burst contract, Burst-safe, no managed in Burst, BurstCompile rules |
wave4-jobhandle-combine-dependencies |
JobHandle.CombineDependencies, fan-in, multiple dependencies |
wave4-world-update-allocator-per-frame-native |
WorldUpdateAllocator, per-frame NativeArray, auto-free allocator |
wave4-native-parallel-multihashmap-parallel-writer |
NativeParallelMultiHashMap, parallel writer, concurrent writes |
wave4-native-disable-container-safety-restriction |
[NativeDisableContainerSafetyRestriction], alias containers, safety override |
wave4-entity-index-in-query-scatter-pattern |
EntityIndexInQuery, scatter write, per-entity index, NativeArray scatter |
wave4-systembase-with-inner-ijobentity |
SystemBase + IJobEntity, managed outer + Burst inner job |
wave4-unity-mathematics-random-per-entity |
Unity.Mathematics.Random, per-entity random, CreateFromIndex, deterministic RNG |
Transforms & Hierarchy (Wave 5)
| Skill |
Keywords |
wave5-local-transform-write-pattern |
LocalTransform, write position rotation scale, transform mutation |
wave5-local-to-world-read-only-contract |
LocalToWorld, read-only, computed transform, do not write |
wave5-parent-child-hierarchy-dynamic |
Parent, Child, dynamic hierarchy, reparent, transform propagation |
wave5-post-transform-matrix-non-uniform-scale |
PostTransformMatrix, non-uniform scale, stretch, TRS matrix |
wave5-write-group-custom-transform |
WriteGroup, custom transform system, override TransformSystem |
wave5-chunk-did-change-incremental-update |
DidChange, chunk version, incremental update, change filter |
wave5-isystem-start-stop |
ISystem OnStartRunning, OnStopRunning, enabled system lifecycle |
Physics (Wave 5)
| Skill |
Keywords |
wave5-physics-velocity-force-application |
PhysicsVelocity, force, impulse, dynamic body, linear angular |
wave5-physics-world-singleton-queries |
PhysicsWorld, singleton, raycast, overlap, CollisionWorld queries |
wave5-collision-filter-layer-masking |
CollisionFilter, layer mask, BelongsTo, CollidesWith |
wave5-stateful-physics-event-buffers |
StatefulTriggerEvent, StatefulCollisionEvent, persistent physics events |
wave5-fixed-step-simulation-system-group |
FixedStepSimulationSystemGroup, fixed step scheduling, physics update group |
Enableable Components (Wave 6)
| Skill |
Keywords |
enableable-component |
IEnableableComponent, enableable, zero-size, hot toggle, no archetype churn |
wave6-enabled-ref-rw-in-job |
EnabledRefRW, EnabledRefRO, enable/disable in IJobEntity |
wave6-with-disabled-query-filter |
WithDisabled, query disabled entities, include disabled in query |
wave6-is-component-enabled-check |
IsComponentEnabled, HasComponent enabled check, SystemAPI enabled |
wave6-baker-set-component-enabled |
baker SetComponentEnabled, bake initially disabled |
wave6-ecb-set-component-enabled |
ECB SetComponentEnabled, deferred enable/disable |
wave6-entity-manager-set-component-enabled |
EntityManager SetComponentEnabled, immediate enable/disable |
wave6-zero-data-enableable-signal |
zero-data enableable, signal component, boolean state, pure flag |
wave6-ecs-state-machine-design |
ECS state machine, enum vs enableable vs structural, state decision model |
Managed Components & Hybrid (Wave 7)
| Skill |
Keywords |
wave7-companion-go-lifecycle |
CompanionComponent, companion GameObject, entity-linked GO |
wave7-ecs-to-go-transform-sync |
ECS→GO transform sync, LocalToWorld→Transform, copy to GameObject |
wave7-add-component-object-hybrid-attach |
AddComponentObject, hybrid attach, managed component on entity |
wave7-idisposable-managed-component |
IDisposable managed component, cleanup, managed lifetime |
wave7-managed-singleton-pattern |
managed singleton, ScriptableObject ref in ECS, non-blittable singleton |
wave7-system-api-managed-api-query |
SystemAPI managed, GetComponentObject, managed query from ISystem |
wave7-unity-object-ref-blittable-asset |
UnityObjectRef, blittable Unity asset reference, Mesh Material reference |
wave7-unity-disable-managed-components-guard |
UNITY_DISABLE_MANAGED_COMPONENTS, managed component guard, stripping |
Anti-Patterns & Debug (Wave 8)
| Skill |
Keywords |
wave8-handle-complete-sync-point-antipattern |
handle.Complete(), sync point, WaitForJobGroupID, main thread stall |
wave8-wrong-system-group-fixed-timestep |
wrong system group, fixed timestep, SimulationSystemGroup vs FixedStep |
wave8-ecb-system-group-mismatch |
ECB group mismatch, playback timing wrong, deferred commands missing |
wave8-enableable-component-query-mismatch |
query returns wrong entities, enabled/disabled mismatch, WithPresent |
wave8-dynamic-buffer-invalidation |
DynamicBuffer stale, buffer reference invalid after structural change |
wave8-ijobchunk-use-enabled-mask-guard |
IJobChunk enabled mask, useEnabledMask, skip disabled entities in chunk |
wave8-baker-dependency-registration |
baker dependency missing, incremental bake not triggered, DependsOn |
wave8-dependency-complete-editor-only-fence |
Dependency.Complete acceptable, editor-only fence, test sync |
Pre-existing Skills (Wave 1 Originals)
| Skill |
Keywords |
dots-baking-patterns |
baking deep-dive, BakingDependencies, Baker multi-phase |
dots-ecb-orchestration |
ECB orchestration, BeginSimulation, EndSimulation, parallel writer |
dots-enableable-components |
enableable deep-dive, IEnableableComponent full guide |
dots-entity-lifecycle |
entity lifecycle, DestroyEntity, ICleanupComponentData, orphan |
dots-spawning-patterns |
spawning patterns, ECB.Instantiate, RequireForUpdate, Random spawn |
ecs-fundamentals-isystem-default |
ISystem vs SystemBase deep-dive, BurstDiscard trap |
ecs-fundamentals-transformusageflags |
TransformUsageFlags full guide, archetype bloat |
singleton-patterns-config-and-access |
singleton config deep-dive, prefab table, input state |
entity-query-patterns-systemapi-query |
SystemAPI.Query deep-dive, IJobEntity promotion |
entity-query-patterns-requireforupdate-gating |
RequireForUpdate deep-dive, feature flag gate, first-frame race |
Authoring Rules
- Senior-level only. No tutorial content.
- Entities 1.x APIs only. Deprecated 0.x APIs get a "DO NOT USE" callout.
- Each skill must answer: what does a senior DOTS engineer know that a junior doesn't?