コンテンツプロセッサとテクスチャに頭を悩ませようとしましたが、少し混乱しています...2つのシナリオがあります。
1つはテクスチャを含むモデルで、インポーターはxmlをロードし、テクスチャファイル名をプロセッサに渡しますが、テクスチャへのコンパイル時の参照であると思われるTextureContentしか取得できませんが、これは役に立ちません。モデルのTexture2Dビットにデータを入力します。
2番目のシナリオは、テクスチャプロセッサに便乗して、テクスチャファイルからスプライトマップオブジェクトを作成することです。スプライトマップは、基本的に、テクスチャとスプライトの幅/高さを含むモデルです。
私を困惑させ続けるのは、モデルとしてのこれらのExternalReferenceとTextureContentです。
public class SpriteMap
{
public Texture2D Texture { get; private set; }
public int SpriteWidth { get; private set; }
public int SpriteHeight { get; private set; }
public SpriteMap(Texture2D texture, int spriteWidth, int spriteHeight)
{
this.texture = texture;
this.spriteWidth = spriteWidth;
this.spriteHeight = spriteHeight;
}
}
それから私はそのようなコンテンツプロセッサを持っています:
[ContentProcessor(DisplayName = "TextureToSpriteMapProcessor")]
public class TextureToSpriteMapProcessor : ContentProcessor<Texture2D, ISpriteMap>
{
[DisplayName("Sprite Width")]
[DefaultValue(64)]
[Description("The size of each sprite's width within the sprite map.")]
public virtual int SpriteWidth { get; set; }
[DisplayName("Sprite Height")]
[DefaultValue(64)]
[Description("The size of each sprite's height within the sprite map.")]
public virtual int SpriteHeight { get; set; }
public override ISpriteMap Process(Texture2D input, ContentProcessorContext context)
{ return new SpriteMap(input, SpriteWidth, SpriteHeight); }
}
プロセッサにTextureContentが与えられていると文句を言いますが、それはテクスチャではありません...しかし、何らかの理由で、contentManagerを介してロードされると、TextureContentが魔法のようにTextureに変わるようです...この場合、どのようにテクスチャを取得できるかについて。どちらのシナリオもかなり似ているので、どちらかを解決すれば両方を解決できると確信していますが、理想的には次のようになりたいと思います。
contentManager.Load<ISpriteMap>("someTextureAsset");
この一見魔法のようなプロセスを機能させる方法を誰かが説明できれば、私はあなたに多くの賞賛を与えます!