我目前正在实现Level
内容类型,它应该代表游戏关卡内容(最重要的是,请参考单独存储的纹理)。输入级别数据包含源纹理资源的完整路径。
问题:如何确定结果内容"名称"我可以写出编译级别的内容吗?纹理应该被重用,因此将它们烘焙到关卡内容中是一个坏主意(浪费空间)。在内容创建期间(例如在关卡编辑器中)不可能提供名称。
举个例子:源文件Levels/Level01.level
使用其完整路径名称引用Textures/Granite.png
和Textures/Dirt.png
。我想在编译时从该数据推断Textures/Granite
和Textures/Dirt
。
答案 0 :(得分:0)
正确的解决方案是使用(不是记录良好的)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>
问题的根源。