mcpField
U
Unity DOTS

Unity DOTS

github.com/juliankerignard開発850 回インストール32 週間前に更新
リポジトリ

Unity DOTS について

Unity 6以降でECS、Job System、Burstを使うためのDOTS開発スキルです。モダンなAPIを中心に、authoringからbaking、system、query、jobまでを案内し、DOTS導入の判断材料も示します。

主な機能

  1. 01authoringからbakingまでのワークフロー
  2. 02モダンな`ISystem`と`SystemAPI.Query`のパターン
  3. 03`IJobEntity`によるエンティティの並列処理
  4. 04Burstとコンポーネントの利用指針
  5. 05DOTS導入の判断ガイド
  6. 06トラブルシューティングとメモリ管理

活用シーン

  1. 01Unity 6以降でのECSワークフロー構築
  2. 02GameObjectのデータをbakingでエンティティ化
  3. 03エンティティの並列処理の実装
  4. 04baking、query、Burstの問題調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/juliankerignard/unity-skills --skill unity-dots

インストール後、Claude Code で/unity-dotsを入力して読み込まれたか確認します。

同梱ファイルreferences/ecs-patterns.mdreferences/ecs-advanced.md

詳細

Unity DOTS — Data-Oriented Technology Stack

このスキルでできること

Unity 6 以降での DOTS(Entity Component System + Job System + Burst Compiler)の実装を案内します。高パフォーマンスが求められるシナリオ(数千のエンティティ)向けに、authoring -> baking -> system -> query -> job の完全なワークフローを網羅します。最新の API(ISystem、SystemAPI.Query、IJobEntity)に焦点を当てています。非推奨の API(Entities.ForEach、デフォルトの選択肢としての SystemBase)は推奨しません。

前提条件

必須パッケージ(Package Manager または manifest.json 経由):

  • com.unity.entities(Unity 6 用に >= 1.3.x)
  • com.unity.burst(>= 1.8.x)
  • com.unity.collections(>= 2.4.x)

オプション:

  • com.unity.entities.graphics — DOTS のレンダリング(Entities Graphics / Hybrid Renderer)
  • com.unity.physics — DOTS の物理演算(エンティティ向けに従来の PhysX を置き換えます)
  • com.unity.transforms — entities に含まれ、LocalTransform を管理します

必要な知識:authoring -> baking への移行を理解するための、MonoBehaviour の基礎知識。

クイックスタート

  1. Package Manager で DOTS パッケージをインストールします
  2. authoring MonoBehaviour と IComponentData(struct)を作成します
  3. authoring -> entity の変換用に Baker を作成します
  4. GameObject を SubScene に配置します(baking に必須)
  5. SystemAPI.Query を使った ISystem を作成し、ロジックを実装します
  6. system と job に [BurstCompile] を追加します

判断基準

DOTS が常に必要とは限りません。採用前に評価してください:

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
ECS ロードマップ(Unity 6.4 以降)
  • Unity 6.4:com.unity.entities パッケージはコアパッケージへ移行します(エディターに統合され、手動でのインストールが不要になります)
  • Unity 6.5(予定):Entity 型の構造に変更があります(64-bit ID に移行)。影響:カスタムシリアル化や NativeContainer 内での Entity の保存に影響する可能性があります。生の Entity を永続化せず、代わりに業務用の識別子を使用してください。

これらの変更によって Unity 6.0~6.3 の既存コードが壊れることはありませんが、長期的なアーキテクチャの判断において重要です。

ステップバイステップガイド

Step 1:Component(データのみ)
// IComponentData = struct pure, pas de logique, juste des donnees
public struct MoveSpeed : IComponentData
{
    public float Value;
}

public struct RotationSpeed : IComponentData
{
    public float RadiansPerSecond;
}

ルール:managed 型(string、class、List)や複雑なメソッドは使用しません。1 つの component は、エンティティの 1 つの側面を表します。

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 });
    }
}

authoring MonoBehaviour は、SubScene 内の GameObject にアタッチします。Baker は bake 時にデータを entity に変換します。

Step 3:System(ロジック)
[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(オプション、さらなるパフォーマンス向上に)
[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();
}

厳守するルール

必ず:

  • SystemBase(class)ではなく ISystem(struct)を使用します — Burst と互換性があります
  • ISystem と job に [BurstCompile] を追加します
  • SystemAPI.Query を使用します(非推奨の Entities.ForEach は使いません)
  • component へのアクセスには RefRO<T>(読み取り)/RefRW<T>(書き込み)を使用します
  • authoring GameObject を SubScene に配置します
  • NativeContainer を破棄します(Allocator.Temp を除く)
  • エンティティの並列処理には IJobEntity を優先します
  • 動的な追加/削除より enableable component(IEnableableComponent)を優先します

決して行わないこと:

  • IComponentData 内での managed 型(string、class、List、arrays)の使用
  • job からのメインスレッドへのアクセス(Debug.Log や従来の Unity API の使用など)
  • Dispose しないまま NativeContainer を使用すること(メモリーリーク)
  • Entities.ForEach の使用(Unity 6 以降では非推奨)
  • デフォルトの選択肢として SystemBase を使用すること(managed 型が必要な場合を除く)

トラブルシューティング

問題解決方法
"Burst compilation failed"Burst コードで管理型を使用しています。string の代わりに FixedString、List の代わりに NativeArray を使用してください
Entity が作成されないBaker がないか、authoring が SubScene にありません
System が実行されないWorld を確認してください。必要に応じて [UpdateInGroup(typeof(...))] を追加してください
パフォーマンスが向上しない[BurstCompile] が付いていることを確認してください。Burst Inspector でプロファイリングしてください
NativeArray のリーク警告必ず OnDestroy で Dispose() を呼び出すか、Allocator.Temp を使用してください
Query が 0 件の結果を返すBaker で component が正しく追加されていることを確認してください
Job 内で "InvalidOperationException" が発生する同時アクセスが原因です。[NativeDisableParallelForRestriction] を使用するか、設計を見直してください
SubScene が bake されないSubScene を再インポートする(右クリック > Reimport)か、エディターを再起動してください

関連スキル

  • /perf-audit — ユースケースに DOTS が適しているかを評価します
  • /unity-code-gen — authoring/baker のボイラープレートを生成します
  • /unity-animation — DOTS アニメーション(Entities Graphics animation)

参考資料

  • 基本的なパターン(authoring、baking、queries、jobs)については references/ecs-patterns.md を参照してください
  • 高度なパターン(Burst、NativeContainers、ハイブリッド、Aspects、DynamicBuffer)については references/ecs-advanced.md を参照してください
  • Unity DOTS の公式ドキュメント
  • Unity DOTS のサンプル

コメント