レベルエディター+ゲーム->レンダリング/ゲーム固有のコードを複製しますか?


14

ゲームのコードを設計する方法について読んでいます。私が理解できなかったことの1つは、ゲームからコードを「コピー」せずに、ゲーム外レベルのエディター(「ゲーム内レベルのエディター」ではない)をどのように管理するかです。たとえば、所有できるさまざまな種類のエンティティに関するすべてのコードをコピーする必要がある場合があります。ゲームのレンダリングコードを追加する必要があります。

私の推測では、これはゲームの「エンジン」部分からDLLを作成することで実現できます。次に、実際のゲームとレベルエディターの間で共有します。

または、これを行うためのより良い/簡単な方法はありますか?

回答:


13

(同じソリューション内で)コードを個別のプロジェクトに分離する必要があります。通常、次のセットアップがあります。

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

さらに大規模なプロジェクトでは、Core、Physics、Graphics、Audio、Input、Networkingなどの複数のプロジェクトでEngine Coreを分離することをお勧めします。これらのプロジェクトはすべて相互に参照することはできませんが、共通の基本型を保存できるCoreをすべて参照しています。

それらが相互に参照する場合、分離は役に立たないでしょう。

とにかく、これは他のプロジェクトでエンジンの一部を再利用するのに役立つはずです。たとえば、エディターの場合、Core自体を参照するGraphicsプロジェクトを参照する必要があります。

また、この分離により、エディターがWPFなどのWindows Onlyテクノロジーを使用できるようになり、ゲームでWindowsとXBLIGをターゲットにできるようになりました。

WPF環境内でXNAを使用する方法の詳細については、次のリンクを参照してください。http//blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx


ありがとう!もう少し見てみると、これが見つかりました-create.msdn.com/en-US/education/catalog/sample/…-WinFormsはWPFよりもよくサポートされているようです!
ウトカルシュシンハ

それは本当ですが、そのサンプルは2008年のもので、WPFが本格的に登場する前のものです。私は1年前にWinFormsからWPFに切り替えましたが、世界が元に戻ることはありません:)。そのサンプルとの互換性を維持したい場合は、WPFアプリでWinFormsControlHostを常に使用できます。
ロイT.

4

ゲームエンジンを設計するときは、実際のゲームロジックから可能な限り最適なレンダリングロジックを分離します。これを行う1つの方法は、ゲームエンジンを構築するときにコンポーネントパターンを使用することです。たとえば、XNAは柔軟性のためにフレームワークレベルでこのパターンを使用します。レベルエディタでのレンダリングに同じコードベースを使用します。必要に応じてラッパーを作成します。

同様に、別のやや人気のあるパターンはMVC(Model-View-Controller)で、これも役立ちます。通常、MVCを使用してエンジンをコーディングします。ビューとモデルに同じコードを使用できますが、ゲーム入力に応じて更新されるゲームエンジンのコントローラーの代わりに、レベルエディターのモデルを編集するカスタムコントローラーを挿入できます。ゲームモデルのシリアル化を実装して、エディターまたはゲームからロード/保存します。

コンポーネントを別々のアセンブリに保持すると、もちろん分離が促進されます...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.