0

私はゲームに取り組んでおり、各プレイヤーが選択できる利用可能なキャラクターのリストがあります。各キャラクターには、(3D)モデルと、コンテンツ パイプラインを介して読み込まれたTexture2Dアイコンが含まれています。

問題は、複数のプレイヤーに同じキャラクターを選択してもらいたいのですがplayer1Char = charDatabase[choosenChar];、参照によるものであるため、繰り返し選択すると同じモデルが参照されます。

コピーしようとしている Character クラスのコンストラクターは次のとおりです。CModel クラスは、そのモデルの位置、回転、およびスケールの値を持つ単なるモデルです。

public Character(CModel model, string name, int HP, Vector2 iconPositionOnSheet)

私がやりたいと思っているのは、そのクラスのディープ コピーを作成することですが、Model クラスはシリアル化できません。私が考えることができる唯一の他の方法は、繰り返しが選択されている場合、Content.Load を使用してファイルから同じモデルをロードすることですが、文字クラスとモデルを単純にコピーする方法があるかどうか疑問に思っています。それは私にとってより簡単に機能するからです。

4

1 に答える 1

0

Model オブジェクトをコンストラクターに渡す代わりに、ContentManager オブジェクト (コンテンツ) とモデルのファイル名文字列を渡します。次に、コンストラクターの本体で、 を呼び出しますContent.Load<Model>(filename)。次に、別の色またはテクスチャを与えたい場合は、basicEffect を複製し、そのキャラクターに持たせたいテクスチャ/色でリセットして、設定を完了します。

これで、新しい Model オブジェクトが他の同様のモデルからヒープの別の場所に割り当てられる (インスタンス化される) ため、両方のプレイヤーが一意のオブジェクトを持つことができます。

コンテンツ マネージャーが行う優れた機能の 1 つは、既に読み込まれている GPU リソースを再利用することです。そのため、モデルを 2 回目にロードすると、C# のヒープ上で一意の参照が得られますが、両方の Model オブジェクトが同じ頂点バッファーと効果を使用するため、2 回インスタンス化する必要はありません。

于 2013-07-24T01:59:37.923 に答える