短縮版:
同じ基本クラスから派生したさまざまな型のクラスを格納できるオブジェクト プールを作成するにはどうすればよいでしょうか。
想定される使用例については、以下を参照してください。
長いバージョン:
私はBaseComponent
多くの派生クラスをChild1Component
持つクラスを持っていChild2Component
ます。
これらのコンポーネントのコレクションを表す別のオブジェクトもあり、そのプロパティは特定の値に設定されています。EntityTemplate
エンティティは一連のコンポーネントとその値によって定義されるため、これを と呼びます。
エンティティ コンポーネントに基づいてエンティティを作成したいと考えています。現在これを行うには、適切な を取得し、EntityTemplate
さまざまなコンポーネントをループして、Clone
各子クラスで定義したメソッドを呼び出します。そこにもCopy
メソッドが定義されていますが、これは役に立つかもしれません。
エンティティの有効期限が切れたら、そのコンポーネントをオブジェクト プールに追加します。次にエンティティを作成する必要があるときは、エンティティ テンプレートを取得し、コンポーネントごとにプールから同じタイプの 1 つを取得します。EntityTemplate
以下のように、 のプロパティと同じプロパティを設定します。
// What i want to do
var entityTemplate = GetTemplate("UniqueString");
var MyActualEntity = new Entity();
foreach(var componentTemplate in entityTemplate)
{
var actualComponent = MagicComponentPool
.GetComponentSameTypeAsParam(componentTemplate);
actualComponent.CopyFrom(componentTemplate);
MyActualEntity.Components.Add(actualComponent);
}