我试图了解内容处理器和纹理,但我有点困惑......我有两个场景:
一个是包含纹理的模型,导入器加载xml并将纹理文件名传递给处理器,但我只能得到一个TextureContent,这似乎是对纹理的编译时引用,但这对我没有帮助填充我模型的 Texture2D 位。
第二种情况是我想搭载纹理处理器从纹理文件创建一个精灵图对象,精灵图基本上是一个包含纹理和精灵宽度/高度的模型。
一直让我难过的是这些 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,但这不是纹理......但是由于某种原因,TextureContent在通过contentManager加载时似乎神奇地变成了纹理......所以我有点困惑至于我如何在这种情况下获得纹理。由于这两种情况都非常相似,我确信如果我解决了一个问题,我会同时解决它们,但理想情况下我希望能够:
contentManager.Load<ISpriteMap>("someTextureAsset");
如果有人能解释如何使这个看似神奇的过程发挥作用,我会给你很多赞誉!