XNA:从源文件路径确定内容名称



我目前正在实现Level内容类型,它应该代表游戏关卡的内容(最重要的是,参考单独存储的纹理)。输入级别数据包含源纹理资源的完整路径。

问题:如何确定可以写出到编译级别内容中的结果内容"名称"?纹理应该被重复使用,所以将它们烘焙到关卡内容中将是一个坏主意(浪费空间)。在内容创建过程中(例如在关卡编辑器中)无法提供名称。

举个例子:源文件Levels/Level01.level使用其完整路径名引用Textures/Granite.pngTextures/Dirt.png。我想在编译时从这些数据推断出Textures/GraniteTextures/Dirt

正确的解决方案是使用(文档不那么充分)ExternalReference<T>类而不是纯字符串名称。

在编写器方面,关卡内容对象包含ExternalReference<TextureContent>(甚至List<ExternalReference<TextureContent>>)实例。当序列化(通过ContentWriter)时,这负责正确调整引用。

读卡器方面简化为普通ContentReader.ReadObject<>调用,例如

public sealed class LocationReader : ContentTypeReader<Location>
{
    protected override Location Read(ContentReader input, Location existingInstance)
    {
        List<Texture2D> textures = input.ReadObject<List<Texture2D>>();
    }
}

注意:注意正确覆盖编写器类中的GetRuntimeType()方法;这对我来说是古怪ReflectionReader<T>问题的根源。

最新更新