4

現在、Xna Content Pipeline 拡張機能を試しています。その実験の中で、読み込みが必要な別の「コンテンツ項目」を含むファイルを読み込もうとしています。例えば:

public class CustomItem
{
    public string Name;
    public Texture2D Texture;
}

これで、コンテンツ プロセッサで「CustomItem」の新しいインスタンスを作成し、名前フィールドを初期化できます。これは単純な文字列だからです。ただし、コンテンツのコンパイル中にテクスチャ ファイルをロードできません (注: テクスチャは単なる例です。理想的には、他のコンテンツ タイプをロードできるようにしたいと考えています)。

私が探しているのは次のようなものです:

// ... start class ...

public override CustomItem Process(SomeInputFormat input, ContentProcessorContext context)
{
    return new CustomItem()
    {
        Name = input.ItemName,
        Texture = context.LoadAsset<Texture2D>(input.ItemTexturePath)   // I realise LoadAsset<T>() does not exist - it's an example of what would be ideal
    };
}

// ... end class ...

これが実際に可能かどうかは誰にもわかりません。可能であれば、他のコンテンツ アイテムをレイト ロードしたり、バイナリ リーダーとライターを使用して独自のカスタム コンテンツ ロードを作成したりする方法は避けたいと思います。

4

1 に答える 1

5

Texture2Dコンテンツパイプラインでは使用できません。Texture2DContent前者のプロキシタイプであるを使用する必要があります。次に、メンバーがTexture2DContentコンテンツのビルド時であるがTexture2D実行時に存在できるようにするためのメカニズムをタイプに含める必要があります。この記事では、これを行う3つの方法を紹介します。

ContentProcessorContext.BuildAndLoadAssetオブジェクトを取得するために使用できTexture2DContentます。.xnbこのテクスチャデータは、そのアセットのファイルに埋め込まれます。

パイプラインでテクスチャデータを実際に使用する必要がない場合、特に複数のアセット間で同じテクスチャを共有する場合は、を使用して、独自のファイルに組み込まれているテクスチャContentProcessorContext.BuildAssetを取得できます。アセットのファイルに(そしてロードを処理します)。ExternalReference.xnb.xnbContentManager

于 2011-07-22T00:56:05.660 に答える