mcpField
B
bevy-ecs-patterns

bevy-ecs-patterns

github.com/laurigates開発5952 回インストール1 日前に更新
リポジトリ

bevy-ecs-patterns について

Bevy を使うゲーム開発者向けの ECS 高度パターンを扱うスキルです。クエリ、スケジューリング、変更検出、パフォーマンス改善を取り上げます。

主な機能

  1. 01複雑なクエリとフィルター
  2. 02クエリ状態とキャッシュ
  3. 03エンティティの関係と階層
  4. 04システムのスケジューリングと依存関係
  5. 05変更検出とリアクティブシステム
  6. 06並列イテレーションと ParamSet

活用シーン

  1. 01ECS クエリ性能の最適化
  2. 02複雑なエンティティ階層の設計
  3. 03システム順序と実行条件の設定
  4. 04アーキタイプの断片化の調査

インストール

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

$npx skills add https://github.com/laurigates/claude-plugins --skill bevy-ecs-patterns

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

同梱ファイルREFERENCE.md

詳細

Bevy ECS のパターン

Bevy の Entity Component System における高度なパターンとテクニックを紹介します。パフォーマンス、保守性、複雑なゲームアーキテクチャに重点を置いています。

このスキルを使用する場面

次のような場合はこのスキルを使用します…次のような場合は bevy-game-engine を使用します…
ECS クエリのパフォーマンスを最適化するときBevy の新しいプロジェクトを一からセットアップするとき
複雑なエンティティの関係や階層を実装するとき基本的な ECS の概念(コンポーネント、システム、リソース)を学ぶとき
システムのスケジューリングと順序を設計するとき入力、アセット、ゲームの状態を扱うとき
変更検出(Changed<T>、Added<T>)を使用するとき基本的なゲームロジックやアプリケーション構造を記述するとき
ParamSet、並列イテレーション、バッチ処理を使用するときレンダリング、UI、オーディオを設定するとき
アーキタイプの断片化やストレージ戦略をデバッグするときプラグインや一般的な Bevy 依存関係を追加するとき

主な専門分野

高度なクエリ

  • 複雑なクエリフィルターと組み合わせ
  • クエリの状態とキャッシュ
  • エンティティの関係と階層
  • 並列イテレーション戦略

システムのスケジューリング

  • システムの順序と依存関係
  • 実行条件とゲーティング
  • システムセットとスケジューリング
  • 固定タイムステップのシステム

変更検出

  • Changed<T> と Added<T> のフィルター
  • 変更追跡のための Ref<T>
  • 効率的なリアクティブシステム

高度なクエリパターン

クエリフィルター

use bevy::prelude::*;

// Multiple filters
fn targeting_system(
    query: Query<
        (&Transform, &mut Target),
        (With<Enemy>, Without<Dead>, Changed<Health>)
    >,
) {
    for (transform, mut target) in &query {
        // Only enemies that are alive and recently damaged
    }
}

// Optional components
fn flexible_system(
    query: Query<(&Transform, Option<&Velocity>, Option<&Acceleration>)>,
) {
    for (transform, velocity, acceleration) in &query {
        if let Some(vel) = velocity {
            // Has velocity
        }
    }
}

// Or filters
fn pickup_system(
    query: Query<Entity, Or<(With<HealthPickup>, With<AmmoPickup>)>>,
) {
    for entity in &query {
        // Process any pickup type
    }
}

競合する複数のクエリ

// Use ParamSet when queries have conflicting access
fn combat_system(
    mut param_set: ParamSet<(
        Query<&mut Health, With<Player>>,
        Query<&mut Health, With<Enemy>>,
    )>,
) {
    // Access one query at a time
    for mut health in param_set.p0().iter_mut() {
        health.0 += 1.0; // Heal player
    }

    for mut health in param_set.p1().iter_mut() {
        health.0 -= 10.0; // Damage enemies
    }
}

// Query transmutation for flexible access
fn dynamic_query(
    all_entities: Query<(Entity, &Transform)>,
    players: Query<&Player>,
) {
    for (entity, transform) in &all_entities {
        if players.get(entity).is_ok() {
            // This is a player
        }
    }
}

エンティティの関係

// Parent-child hierarchies
#[derive(Component)]
struct Inventory;

#[derive(Component)]
struct InventorySlot(usize);

fn spawn_inventory(mut commands: Commands) {
    commands.spawn((Inventory, SpatialBundle::default()))
        .with_children(|parent| {
            for i in 0..10 {
                parent.spawn((InventorySlot(i), SpriteBundle::default()));
            }
        });
}

// Query parent from child
fn child_system(
    children: Query<(&InventorySlot, &Parent)>,
    parents: Query<&Inventory>,
) {
    for (slot, parent) in &children {
        if let Ok(inventory) = parents.get(parent.get()) {
            // Access parent inventory
        }
    }
}

// Query children from parent
fn parent_system(
    parents: Query<&Children, With<Inventory>>,
    slots: Query<&InventorySlot>,
) {
    for children in &parents {
        for &child in children.iter() {
            if let Ok(slot) = slots.get(child) {
                // Access child slot
            }
        }
    }
}

エージェント向けの最適化

コンテキストコマンド
手早くコンパイルを確認cargo check 2>&1 | head -30
テストを素早く実行cargo test --lib -- --test-threads=1 -q
ECS の使用に関するエラーを確認cargo clippy -- -W clippy::all 2>&1 | head -50
プロジェクト内のコンポーネントを一覧表示grep -rn "derive(Component)" src/ --include="*.rs"
プロジェクト内のシステムを一覧表示grep -rn "fn.*Query<" src/ --include="*.rs"
システムの順序を確認grep -rn "\.add_systems|\.chain()|\.after(|\.before(" src/ --include="*.rs"
ParamSet の使用箇所を確認grep -rn "ParamSet" src/ --include="*.rs"

システムのスケジューリング、変更検出、パフォーマンスパターン、カスタムエンティティコマンド、設計のベストプラクティスについては、REFERENCE.md を参照してください。

コメント