私は、コンポーネントベースのエンティティ設計に頭を悩ませようとしています。
私の最初のステップは、オブジェクトに追加できるさまざまなコンポーネントを作成することでした。すべてのコンポーネントタイプに対して、iにはマネージャーがあり、マネージャーはすべてのコンポーネントの更新機能を呼び出し、必要に応じてキーボードの状態などを渡します。
次にしたことは、オブジェクトを削除し、各コンポーネントにIDを持たせることでした。したがって、オブジェクトは同じIDを持つコンポーネントによって定義されます。
今、私はすべてのコンポーネントのマネージャーは必要ないと考えています。たとえばSizeComponent
、Size
プロパティを持っているだけです。結果としてSizeComponent
更新メソッドはなく、マネージャーの更新メソッドは何もしません。
私の最初の考えはObjectProperty
、コンポーネントをコンポーネントのプロパティとして持つのではなく、コンポーネントがクエリできるクラスを持つことでした。だから、オブジェクトが多数を持っているでしょうObjectProperty
し、ObjectComponent
ます。コンポーネントには、オブジェクトのプロパティを照会する更新ロジックがあります。マネージャーは、コンポーネントの更新メソッドの呼び出しを管理します。
これはオーバーエンジニアリングのように思えますが、マネージャーがどのオブジェクトにどのコンポーネントロジックを実行する必要があるかを知る方法が必要なので、コンポーネントを取り除くことができるとは思いません(そうでなければコンポーネントを削除するだけです更新ロジックを完全にマネージャーにプッシュします)。
- この(持っている
ObjectProperty
、ObjectComponent
とComponentManager
オーバーエンジニアリングクラス)? - 良い選択肢は何でしょうか?
RenderingComponent
およびa によって使用される位置としてのオブジェクトPhysicsComponent
。資産をどこに置くかについての判断を過剰に考えていますか?どちらかに固定するだけで、他のクエリに必要なプロパティを持つコンポーネントのオブジェクトを照会させる必要がありますか?
PhysicalStateInstance
(オブジェクトごとに1つ)とGravityPhysicsShared
(ゲームごとに1つ)を試すことができます。しかし、これは建築家の多幸感の領域に進出していると言いたがります。自分自身を穴に建築しないでください(最初のコンポーネントシステムで行ったとおりです)。接吻。
SizeComponent
はやり過ぎだと思います-ほとんどのオブジェクトにはサイズがあると仮定できます-コンポーネントモデルが使用されるのは、レンダリング、AI、物理学などです。サイズは常に同じように動作するため、そのコードを共有できます。