Цель
Я пытаюсь загрузить пользовательский класс, содержащий Texture2D
, из xml-файла, используя импортер по умолчанию (содержимое XML), без процессора.
подход
Множество исследований в Интернете и множество других ошибок приводят меня к этому XML:
<?xml version="1.0" encoding="utf-16"?>
<XnaContent xmlns:Components="Entities.Components">
<Asset Type="EntitiesContentPipeline.EntityTemplateContent">
<Name>entity name</Name>
<TestTexture>
<Reference>#External1</Reference>
</TestTexture>
</Asset>
<ExternalReferences>
<ExternalReference ID="#External1" TargetType="Microsoft.Xna.Framework.Graphics.Texture2D">C:\Documents and Settings\GDuckett\My Documents\Visual Studio 2010\Projects\Gravitron\Gravitron\Gravitron\bin\x86\Debug\Content\Bullet.xnb</ExternalReference>
</ExternalReferences>
</XnaContent>
Да, мне также не нравится жестко заданный путь, но если я смогу заставить его работать без специального читателя и / или писателя для каждого типа, содержащего Texture2D
, я могу жить с ним.
Ниже приведена моя версия содержимого класса (используется конвейером):
[ContentSerializerRuntimeType("Entities.Content.EntityTemplate, Entities")]
public class EntityTemplateContent
{
public string Name;
public ExternalReference<Texture2D> TestTexture;
public EntityTemplateContent()
{
}
}
Ниже моя рабочая версия:
public class EntityTemplate
{
public string Name;
public Texture2D TestTexture;
public EntityTemplate()
{
}
}
Проблема
Если я попытаюсь сделать var test = Content.Load<EntityTemplate>("BulletTemplate");
ниже, я получу ошибку:
Ошибка загрузки «Пуля». ContentTypeReader Microsoft.Xna.Framework.Content.Texture2DReader, Microsoft.Xna.Framework.Graphics, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = 842cf8be1de50553 конфликтует с существующим обработчиком Microsoft.Xna.Framework.Content.ReflectiveReader`1 .Xna.Framework.Graphics.Texture2D, Microsoft.Xna.Framework.Graphics, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 842cf8be1de50553]], Microsoft.Xna.Framework, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 842cf8be1de50553 для типа Microsoft.Xna.Framework.Graphics.Texture2D.
Похоже, что читатель во время выполнения нашел 2 читателя для работы с активом Texture2D
, читателем ReflectiveReader<Texture2D>
и Texture2DReader
.
Вопрос
Как я могу решить эту проблему, чтобы я в итоге получил правильно заполненный объект со свойством Texture2D
, ссылающимся на загруженную текстуру?
Примечание: я не хочу добавлять другое строковое свойство и создавать метод для моего объекта с именем LoadContent
или что-то в этом роде. Мне бы хотелось, чтобы Content.Load
было единственной вещью, по которой мне нужно позвонить.
Я также хочу не писать своих собственных читателей / писателей для каждого типа, который содержит свойство Texture2D
.
В идеале я хочу избежать создания класса-обертки для Texture2D или подкласса, но если нет альтернативы, я рад за решение, которое делает это.