我正在为XNA游戏构建一个内容编辑器,我已经准备好了我的内容读者和作家。在我的编辑器中,我将迭代我文件夹中的所有文件,以在我的编辑器窗口中显示对象列表。我已经设置了这些东西,但是在获取我的内容文件夹的文件列表后,我仍然坚持要做的事情。
所有文件都有XNB扩展名,唯一(非hacky)阅读方式是使用XNA内容阅读器。但我想提前知道文件的内容类型(是地图或游戏对象模板还是我定义的许多其他类型),而不是逐个加载它们并尝试加载每个对于每种可能的内容类型,实际上是不可能的(或者说,最糟糕的编程实践)。
我怎样才能获得类似这样的功能:
ContentManager.ContentTypeOf(string assetPath);
返回一个类型,所以我事先可以知道加载(而不是加载)的位置。加载游戏的所有地图只是为了编辑单个对象模板不是一个好主意。必须有一种实用的方法来区分内容文件的类型。
答案 0 :(得分:1)
您可以访问xnb以获取内容阅读器名称。
答案 1 :(得分:1)
也许有点晚了,但我遇到了同样的问题。
我刚使用自己的内容处理器,将空文件添加到输出目录“[modelfilename] .model”。并在我的代码中枚举所有* .model文件,然后仅通过没有扩展名的文件名加载模型。如果需要,您还可以在该文件中轻松添加更多信息。
自定义内容处理器的代码:
string Name = Path.GetFileNameWithoutExtension(context.OutputFilename);
FileStream fs = File.Create(Path.GetDirectoryName(context.OutputFilename) + @"\" + Name + @".model");
fs.Close();
答案 2 :(得分:0)
这很简单,只需将其加载为Object
类型:
Type type = content.Load<Object>("MyContent").GetType();
唯一的缺点是您必须加载整个资产才能找出其类型。
要为以这种方式加载的内容实施不同的生命周期策略,请考虑使用单独的ContentManager
实例,甚至从ContentManager
派生自己的类,并查看受保护的ReadAsset
方法。
答案 3 :(得分:0)
好的,在没有找到实际读取文件的任何简单解决方案之后,我决定将文件组织到文件夹层次结构中,现在我知道什么文件是什么。它至少完成了这项工作。可能不是最可行的解决方案,但它确实有效。