Я пытался разобраться с процессором контента и текстурами, но я немного запутался ... У меня есть 2 сценария:
Один - это модель, которая содержитTexture, импортер загружает XML и передает имя файла текстуры в процессор, но я могу получить только TextureContent, который кажется ссылкой на текстуру во время компиляции, но это не помогает мне заполнить бит Texture2D моей модели.
2-й сценарий: я хочу использовать текстурный процессор для создания объекта spritemap из файла текстуры, spritemap в основном представляет собой модель, которая содержит текстуру и ширину / высоту спрайта.
То, что меня постоянно ставит в тупик, это то, что 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");
Если кто-нибудь может объяснить, как заставить этот, казалось бы, волшебный процесс работатьЯ дам вам много похвал!