ECSの希釈


Commission: Mad Scientist by Culpeo-Fox on DeviantArt

この記事では、ECS パターンと Flame Steel Engine ゲーム ツールキットでの実装について大まかに説明します。 Entity Component System パターンは、ゲームなどで使用されます。 Unityエンジン上で。ゲーム内の各オブジェクトはコンポーネントで満たされたエッセンスです。  OOP があるのになぜこれが必要なのでしょうか?
次に、ゲームの実行中にオブジェクトのプロパティ、動作、表示を直接変更します。このようなことは現実世界のアプリケーションでは見られません。パラメータ、オブジェクトのプロパティ、表示、サウンドの変化のダイナミクスは、会計ソフトウェアよりもゲームの特徴です。


バナナを渡さなかった

ゲームにバナナ クラスがあるとします。そしてゲームデザイナーはバナナを武器として使用したいと考えていました。現在のアーキテクチャでは、バナナは武器とは何の関係もないとしましょう。バナナを武器にする?全てのアイテムを武器に
しますか?ECS は、この差し迫った問題に対する解決策を提供します。ゲーム内のすべてのオブジェクトはコンポーネントで構成されている必要があります。以前はバナナは Banana クラスでしたが、今後はこれを作成し、他のすべてのオブジェクトを Entity クラスにして、それらにコンポーネントを追加します。バナナが次のコンポーネントで構成されているとします。

<オル>

  • 位置コンポーネント (ゲーム世界の座標 – x、y、z)
  • 回転コンポーネント (x、y、z 座標)
  • バナナのカロリー成分 (主人公は太りすぎないように注意してください)
  • バナナ画像コンポーネント
  • 現在、すべてのバナナに新しいコンポーネントを追加しています。これは、バナナが武器として使用できることを示すフラグです –武器のコンポーネント。ここで、ゲーム システムは、プレイヤーがバナナに近づいたことを認識すると、バナナに武器コンポーネントの存在を確認し、存在する場合は、プレイヤーにバナナを武装させます。
    私のゲーム「Flame Steel Call Of The Death Mask」では、ECS パターンが全体的に使用されています。オブジェクトはコンポーネントで構成されており、コンポーネント自体にコンポーネントを含めることができます。一般に、オブジェクトの分割 < – >私の実装ではコンポーネントが欠落していますが、これはさらにプラスです。

    screenshot_2016-09-24_14-33-43

    このスクリーンショットのショットガンはプレーヤーのコンポーネントであると同時に、2 番目のショットガンは通常のオブジェクトとしてゲーム マップ上にぶら下がっているだけです。
    このスクリーンショットでは、2 つのシステムが実行されています –シーンレンダラーとインターフェイスレンダラー。シーン レンダラーはマップ上でショットガン画像コンポーネントを操作し、インターフェイス レンダラーはプレイヤーの手の中でショットガン画像コンポーネントを操作します。

    関連リンク:
    https://habrahabr.ru/post/197920/
    https://www.youtube.com/watch?v=NTWSeQtHZ9M