2

私はコンポーネントベースのゲームオブジェクトアーキテクチャを設計しています。私の状況では、レンダリング可能オブジェクトと物理オブジェクトがあります。レンダーシーンにはレンダーラブルが含まれています。物理シーンには、物理​​オブジェクトが含まれています。レンダリング可能なオブジェクトと物理オブジェクトを持つゲームオブジェクトがあります。これらのそれぞれは、完全にゼロの結合を持っています。それらは別々のライブラリにさえあります。

ゲームオブジェクトに必要な最も明白なデータの1つは、位置と回転です。レンダリング可能なオブジェクトと物理オブジェクトの両方がこの情報を読み取る必要があり、場合によっては書き込む必要があります。コンポーネントではなくゲームに固有であるが、一部のコンポーネントで必要とされる情報を処理するための効率的なアプローチは何ですか?

4

1 に答える 1

2

これは私には少し奇妙なアーキテクチャのようです.2つの別々のシーングラフの同期を維持するために多くの作業を行う必要があり、おそらくそれらを完全に分離した状態に保つことは不可能であることに気付くでしょう(質問で説明している状況は例ですが、もっとたくさんあります.....)

単一のゲーム オブジェクト グラフについて考えることをお勧めします。オブジェクトごとに物理戦略とレンダリング戦略を引き続き持つことができますが、個別のオブジェクト グラフではなく、ゲーム オブジェクトへの「プラグイン」として見ることをお勧めします。このようにして、ゲーム オブジェクトは、物理コンポーネントとレンダリング コンポーネントの両方からアクセスされる位置/回転ベクトルを持つことができます。

単一のゲーム オブジェクト グラフへの再構築を好まない場合の代替手段は、位置/回転情報を別の構造 (ベクトルの大きな配列など) に分離することです。Physics オブジェクトと Render オブジェクトの両方が、この構造へのアクセスを共有できます。

これは次のことを意味します。

  • Physics オブジェクトと Render オブジェクトの両方が、配列内の自身の位置のインデックスを知る必要があります (インデックスを直接格納するか、何らかの形式のハッシュ ルックアップによって)。
  • Physics オブジェクトと Render オブジェクトの両方が、同じ位置/回転形式に満足している必要があります。
  • オブジェクトが作成/破棄されると、追加の簿記が必要になります
  • たとえば、レンダリング中に新しい Physics オブジェクトが追加された場合はどうなるでしょうか。

全体として、これがあなたに多くの利益をもたらすかどうかはわかりません....しかし、サードパーティの物理ライブラリの設計など、他の制約がある場合は理にかなっているかもしれません.

于 2011-12-05T01:21:15.993 に答える