Agent skill
Unity DOTS
Data-Oriented Technology Stack (ECS, Job System, Burst). Authoring, baking, systems, queries, jobs paralleles. Triggers: /dots, /ecs, 'DOTS', 'ECS', 'ISystem', 'SystemAPI', 'IJobEntity', 'Burst', 'NativeArray', 'Entity', 'IComponentData', 'data oriented'.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/unity-dots
SKILL.md
Unity DOTS — Data-Oriented Technology Stack
Ce que fait cette skill
Guide l'implementation DOTS (Entity Component System + Job System + Burst Compiler) dans Unity 6+. Couvre le workflow complet authoring -> baking -> system -> query -> job pour des scenarios haute performance (milliers d'entites). Se concentre sur les API modernes : ISystem, SystemAPI.Query, IJobEntity. Les API depreciees (Entities.ForEach, SystemBase comme choix par defaut) ne sont pas recommandees.
Prerequis
Packages obligatoires (via Package Manager ou manifest.json) :
com.unity.entities(>= 1.3.x pour Unity 6)com.unity.burst(>= 1.8.x)com.unity.collections(>= 2.4.x)
Optionnels :
com.unity.entities.graphics— rendu DOTS (Entities Graphics / Hybrid Renderer)com.unity.physics— physique DOTS (remplace PhysX classique pour les entites)com.unity.transforms— inclus dans entities, gestion LocalTransform
Connaissances : MonoBehaviour de base pour comprendre la transition authoring -> baking.
Demarrage rapide
- Installer les packages DOTS via Package Manager
- Creer un authoring MonoBehaviour + un IComponentData (struct)
- Creer un Baker pour la conversion authoring -> entity
- Placer le GameObject dans un SubScene (obligatoire pour le baking)
- Creer un ISystem avec SystemAPI.Query pour la logique
- Ajouter
[BurstCompile]sur le system et les jobs
Arbre de decision
DOTS n'est pas toujours necessaire. Evaluer avant d'adopter :
Mon projet a-t-il besoin de DOTS ?
|
+-- Prototype / petit jeu (< 100 entites dynamiques) ?
| --> NON. MonoBehaviour est plus simple et suffisant
|
+-- Jeu moyen (100-1000 entites) ?
| --> PROBABLEMENT NON. Optimiser les MonoBehaviours d'abord
|
+-- Simulation massive (1000+ entites similaires) ?
| --> OUI. DOTS brille ici (foules, particules custom, voxels, RTS)
|
+-- Besoin de calcul CPU intensif (pathfinding, IA, physique custom) ?
| --> Job System + Burst SANS ECS. On peut utiliser les jobs seuls
|
+-- Migration d'un projet existant ?
| --> Hybride : garder MonoBehaviours + ajouter DOTS pour les systemes critiques
|
+-- Nouveau projet from scratch avec beaucoup d'entites ?
--> Full DOTS avec authoring/baking
Roadmap ECS (Unity 6.4+)
- Unity 6.4 : le package
com.unity.entitiestransite vers un package core (integre a l'editeur, plus besoin de l'installer manuellement) - Unity 6.5 (prevu) : changements structurels sur le type
Entity(passage a un ID 64-bit). Impact : la serialisation custom et le stockage d'Entitydans desNativeContainerpourront etre affectes. Anticiper en evitant de persister desEntitybruts — utiliser des identifiants metier a la place.
Ces changements ne cassent pas le code existant dans Unity 6.0-6.3 mais sont importants pour les decisions d'architecture a long terme.
Guide etape par etape
Step 1 : Component (data only)
// IComponentData = struct pure, pas de logique, juste des donnees
public struct MoveSpeed : IComponentData
{
public float Value;
}
public struct RotationSpeed : IComponentData
{
public float RadiansPerSecond;
}
Regles : pas de types managed (string, class, List), pas de methodes complexes. Un component = un aspect de l'entite.
Step 2 : Authoring + Baker
public class MoveSpeedAuthoring : MonoBehaviour
{
public float Speed = 5f;
}
public class MoveSpeedBaker : Baker<MoveSpeedAuthoring>
{
public override void Bake(MoveSpeedAuthoring authoring)
{
var entity = GetEntity(TransformUsageFlags.Dynamic);
AddComponent(entity, new MoveSpeed { Value = authoring.Speed });
}
}
L'authoring MonoBehaviour va sur le GameObject dans le SubScene. Le Baker convertit les donnees en entity au bake time.
Step 3 : System (logique)
[BurstCompile]
public partial struct MoveForwardSystem : ISystem
{
[BurstCompile]
public void OnUpdate(ref SystemState state)
{
float dt = SystemAPI.Time.DeltaTime;
foreach (var (transform, speed) in
SystemAPI.Query<RefRW<LocalTransform>, RefRO<MoveSpeed>>())
{
transform.ValueRW.Position +=
transform.ValueRO.Forward() * speed.ValueRO.Value * dt;
}
}
}
Step 4 : Job parallele (optionnel, pour encore plus de perf)
[BurstCompile]
public partial struct MoveJob : IJobEntity
{
public float DeltaTime;
void Execute(ref LocalTransform transform, in MoveSpeed speed)
{
transform.Position += transform.Forward() * speed.Value * DeltaTime;
}
}
// Dans le system :
[BurstCompile]
public void OnUpdate(ref SystemState state)
{
new MoveJob { DeltaTime = SystemAPI.Time.DeltaTime }
.ScheduleParallel();
}
Regles strictes
TOUJOURS :
- Utiliser
ISystem(struct) au lieu deSystemBase(class) — compatible Burst - Ajouter
[BurstCompile]sur les ISystem et les jobs - Utiliser
SystemAPI.Query(pasEntities.ForEachqui est deprecie) - Utiliser
RefRO<T>(lecture) /RefRW<T>(ecriture) pour l'acces aux components - Placer les GameObjects authoring dans un SubScene
- Dispose les NativeContainers (sauf Allocator.Temp)
- Preferer
IJobEntitypour le traitement parallele sur entites - Preferer les enableable components (
IEnableableComponent) aux ajouts/retraits dynamiques
JAMAIS :
- De types managed (string, class, List, arrays) dans les IComponentData
- D'acces au main thread depuis un job (pas de Debug.Log, pas d'API Unity classique)
- De NativeContainer sans Dispose (memory leak)
- De
Entities.ForEach(deprecie Unity 6+) - De
SystemBasecomme choix par defaut (sauf si managed types necessaires)
Troubleshooting
| Probleme | Solution |
|---|---|
| "Burst compilation failed" | Types managed dans le code Burst. Utiliser FixedString au lieu de string, NativeArray au lieu de List |
| Entity pas creee | Baker manquant ou authoring pas dans un SubScene |
| System pas execute | Verifier le World. Ajouter [UpdateInGroup(typeof(...))] si necessaire |
| Performance pas meilleure | Verifier [BurstCompile] present. Profiler avec Burst Inspector |
| NativeArray leak warning | Toujours Dispose() dans OnDestroy ou utiliser Allocator.Temp |
| Query retourne 0 resultats | Verifier que les components sont bien ajoutes dans le Baker |
| "InvalidOperationException" dans un job | Acces concurrent. Utiliser [NativeDisableParallelForRestriction] ou revoir le design |
| SubScene ne bake pas | Reimporter le SubScene (clic droit > Reimport) ou redemarrer l'editeur |
Skills connexes
/perf-audit— Evaluer si DOTS est justifie pour le cas d'usage/unity-code-gen— Generation de boilerplate authoring/baker/unity-animation— DOTS animation (Entities Graphics animation)
References
- Voir
references/ecs-patterns.mdpour les patterns de base (authoring, baking, queries, jobs) - Voir
references/ecs-advanced.mdpour les patterns avances (Burst, NativeContainers, hybride, Aspects, DynamicBuffer) - Unity DOTS documentation officielle
- Unity DOTS samples
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?