Entity Component System
Overview
ECS はインメモリデータベースのように考
えることができます。
- Entity: コンポーネントを付
ける一意
の ID(Rust
u32) - Component: ゲーム内 のデータ(Rust Structs)
- System: データに作用 する関数 (Rust Functions)
Performance
- キャッシュフレンドリー
- 並列性
Usability
- ゲーム開発 では OOP より優 れています
コードの複雑性 が増 すにつれて、ゲームに柔軟性 と並列性 を与 えます。
flowchart TB
SS[SpaceShip]
C[Cat]
Vl([Velocity])
P([Position])
Fl([Fuel])
SS ----> Vl
SS ----> P
SS ----> Fl
C ----> Vl
C ----> P
C ----> Fl
Storage
SQL Table vs. Entity Component Layout Table

Commands
Commands は、エンティティのスポーン、デスポーン、コンポーネントの追加
などのタスクを容易
にする、安全
で効率的
な遅延
方式
でゲームの状態
を変更
する方法
を提供
します。
- エンティティのスポーン/デスポーンや既存 エンティティへのコンポーネントの追加 /削除 アクションをキューに入 れます。
- 即座 には反映 されず、キュー内 のコマンドは World を変更 しても安全 なときに自動的 に適用 されます。
- World への排他的 アクセスが必要 で、並列 に適用 することはできません。
- データベースでの
INSERTまたはDELETE操作 に似 ています。
Spawning Entities
commands.spawn((
Position { x: 0.0, y: 0.0 },
Velocity { x: 1.0, y: 1.0 }
));Queries
Queries は既存
のコンポーネントへの即時
アクセスを提供
し、ECS アーキテクチャ内
でのデータの取得
と変更
を可能
にします。
- Bevy の ECS に保存 されているコンポーネントに直接 アクセスして読 み書 きできます。
- 2 つのシステムが同 じコンポーネントタイプをクエリし、少 なくとも 1 つのアクセスが mutable でない限 り、並列 に実行 できます。
- データベースでの
SELECTまたはUPDATE操作 に似 ています。
Querying Components
Bevy は自動的 にパラメータを注入 します:
fn update_position(mut query: Query<(&Velocity, &mut Position)>) {
// ...
}