私は軽量のゲーム エンジンを作成しており、そのための調査を行っているときに、「具象クラスからの継承」モデルではなく「コンポーネントのコレクション」モデルによるゲーム オブジェクトの実装を提唱する説得力のある記事をいくつか見つけました。多くの利点があります:
- オブジェクトは、データ駆動型の設計手法を使用して構成できるため、設計者はプログラマーを関与させずに新しいオブジェクトを考え出すことができます。
- ソースファイルの依存関係が少なくなる傾向があるため、コードをより高速にコンパイルできます。
- エンジン全体がより一般的になります。
- 継承階層の上位にある具体的なクラスを変更しなければならないという予期しない結果を回避できます。
- 等々。
しかし、システムには不透明な部分があります。主に、同じオブジェクトのコンポーネントが相互に通信する方法です。たとえば、ゲーム内の弾丸をモデル化するオブジェクトが、次のコンポーネントに関して実装されているとします。
- 視覚的表現のためのジオメトリのビット
- 世界での地位
- 他のオブジェクトとの衝突に使用されるボリューム
- 他のもの
レンダリング時に、正しく表示するためにジオメトリはワールド内での位置を認識している必要がありますが、オブジェクト内のすべての兄弟コンポーネント間でその位置をどのように見つけるのでしょうか? また、更新時に、他のオブジェクトとの交差をテストするために、コリジョン ボリュームはどのようにしてワールド内のオブジェクトの位置を見つけるのでしょうか?
私の質問は次のように要約できると思います: さて、それぞれが少しの機能を実装する多数のコンポーネントで構成されるオブジェクトがあります。これが実行時に機能するための最良の方法は何ですか?