ホーム
おまかせ表示
ログイン
設定
MonoBookについて
免責事項
MonoBook
検索
「
エンティティ・コンポーネント・システム
」を編集中
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''エンティティ・コンポーネント・システム'''(英語: Entity component system、通称:ECS)とは、「[[データ]]」と「処理」を完全に分離して考える[[プログラミング]]の手法のひとつ。 「[[コンポーネント指向]]」とはまったくの別物。 == 概要 == ECSは「データ」と「処理」が分離していることで「階層構造がない」という特徴がある。 階層構造は「階層を大きく組み直したいとき」に依存関係が複雑すぎて「右を治したら左が壊れる」という状態に陥り破綻するという問題を抱えているが、ECSを使えばこの問題を回避できる。 このことから「上層部の思いつきによる急な仕様変更に強い」と言われる。 * 「[[階層化の有害性]]」も参照 いわゆる「[[オブジェクト指向]]」を全否定したものだが、一部の[[オブジェクト指向プログラミング言語]]との相性は悪くなく、[[インターフェイス]]と[[構造体]]と[[LINQ]]を搭載する[[C#]]との相性は非常に良い。 ECSはゲーム業界では非常に人気がある。 [[ゲームエンジン]]の[[Unity]]も独自のECSを採用している。 == 主な用語 == === エンティティ === オブジェクト指向でいうオブジェクトに近いもの。オブジェクト指向でいう「メソッド」や「プロパティ」や「メンバ変数」などは一切持たず、エンティティの「識別子(ID)」と「コンポーネントの配列」だけを持つ。 <source lang="csharp"> class Entity { public List<IComponent> Components { get; private set;} = new List<IComponent>(); } </source> === コンポーネント === エンティティが持つ要素のひとつ。いわゆる「[[データ]]」である。 [[構造体]]で実装することが多い。 <source lang="csharp"> interface IComponent { } struct DrawableComponent : IComponent { } struct HitpointComponent : IComponent { public int HitPoint; } </source> === システム === いわゆる「処理」である。エンティティの配列から特定のコンポーネントを持つものを抽出し、それらに対して処理を行う。 以下のような感じである。 * コンポーネントAを持つエンティティに対する処理(システム) * コンポーネントAとコンポーネントBを併せ持つエンティティに対する処理(システム) [[category: プログラミング]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)