如何扫描内容管理器中的所有 XNB 文件?

How to scan all XNB files in Content Manager?

所以我正在 VS 中使用 MonoGame 构建游戏。我正在使用 MonoGame 的内容管道(生成 XNB 文件)。

问题是我的游戏是可扩展的(这是一个节奏游戏,用户可以下载 songs/charts)。所以我不得不支持 "plug-in" XNB 文件。

所以我已经为我的自定义类型创建了自定义导入器/Reader/编写器,但我找不到扫描内容文件夹以查找哪些 xnb 可用的方法。例如,如果用户在 Content 文件夹中添加了一个 Song1.xnb,我将如何(以编程方式)知道该文件在那里?

我在 ContentManager 中找不到任何 showFiles 或 scanContent 来列出所有可用文件。如何以跨平台方式查找内容文件夹中的文件?

我的结构示例:

Content
  - Songs
    - Song0
      - 0.xnb
      - 1.xnb
      - Song0.xnb
    - Song1
      - 0.xnb
      - Song0.xnb

所以我的歌曲文件夹总是有一个 {Folder}.xnb 文件,其中包含歌曲的结构(以及 X.xnb 的参考 (0,1 ,2 ...))。但是我找不到 Songs 文件夹中存在的文件夹,所以我可以调用 Load<Music>("Songs\{SongFolder}\{SongFolder}.xnb")

谢谢!

我使用此功能加载我文件夹中的所有纹理。

public static           List<Texture2D>     Textures(string folderPath)
{
    if (!folderPath.StartsWith(@"\")) folderPath = @"\" + folderPath;
    List<string> paths = Directory.GetFiles(Help.RootDir(Content.RootDirectory) + folderPath).ToList();
    List<Texture2D> images = new List<Texture2D>();
    foreach (string s in paths)
    {
        if (s.EndsWith(".xnb"))
            images.Add(Texture(s.Replace(Content.RootDirectory, "").Replace(".xnb", "")));
    }
    return images;
}

folderPath 变量应该是从内容文件夹(没有它)到要从中加载所有 textures/songs 的文件夹的路径。在您的情况下,将 "Songs\Songs0" 作为参数传递,将 Texture2D 替换为 SongSoundEffect , 它将正常工作。

此外,Help.RootDir 是我制作的一个简单函数:

public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }

并且还包括System.IO;