「エンティティ・コンポーネント・システム」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (→エンティティ) |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
− | '''エンティティ・コンポーネント・システム'''(英語: Entity component | + | '''エンティティ・コンポーネント・システム'''(英語: Entity component system、通称:ECS)とは、「[[データ]]」と「処理」を完全に分離して考える[[プログラミング]]の手法のひとつ。 |
+ | |||
+ | 「[[コンポーネント指向]]」とはまったくの別物。 | ||
データと処理が分離しているので上層部の思いつきによる急な仕様変更に強いという特徴がある。 | データと処理が分離しているので上層部の思いつきによる急な仕様変更に強いという特徴がある。 | ||
+ | |||
+ | いわゆる「[[オブジェクト指向]]」を全否定したものだが、[[オブジェクト指向プログラミング言語]]との相性は悪くなく、[[インターフェイス]]と[[構造体]]と[[LINQ]]を搭載する[[C#]]との相性は非常に良い。 | ||
== 主な用語 == | == 主な用語 == | ||
− | |||
=== エンティティ === | === エンティティ === | ||
− | + | オブジェクト指向でいうオブジェクトに近いもの。オブジェクト指向でいう「メソッド」や「プロパティ」や「メンバ変数」などは一切持たず、エンティティの「識別子(ID)」と「コンポーネントの配列」だけを持つ。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
class Entity { | class Entity { |
2022年12月7日 (水) 04:19時点における版
エンティティ・コンポーネント・システム(英語: Entity component system、通称:ECS)とは、「データ」と「処理」を完全に分離して考えるプログラミングの手法のひとつ。
「コンポーネント指向」とはまったくの別物。
データと処理が分離しているので上層部の思いつきによる急な仕様変更に強いという特徴がある。
いわゆる「オブジェクト指向」を全否定したものだが、オブジェクト指向プログラミング言語との相性は悪くなく、インターフェイスと構造体とLINQを搭載するC#との相性は非常に良い。
主な用語
エンティティ
オブジェクト指向でいうオブジェクトに近いもの。オブジェクト指向でいう「メソッド」や「プロパティ」や「メンバ変数」などは一切持たず、エンティティの「識別子(ID)」と「コンポーネントの配列」だけを持つ。
class Entity {
public List<IComponent> Components { get; private set;} = new List<IComponent>();
}
コンポーネント
エンティティが持つ要素のひとつ。いわゆる「データ」である。 構造体で実装することが多い。
interface IComponent {
}
struct DrawableComponent : IComponent {
}
struct HitpointComponent : IComponent {
public int HitPoint;
}
システム
いわゆる「処理」である。エンティティの配列から特定のコンポーネントを持つものを抽出し、それらに対して処理を行う。
以下のような感じである。
- コンポーネントAを持つエンティティに対する処理(システム)
- コンポーネントAとコンポーネントBを併せ持つエンティティに対する処理(システム)