在我目前的游戏中,modding是游戏中的一个重要部分。我花了一些时间来开发一个将修改后的内容加载到游戏中的良好系统,但我最终确定了一种方法,如果可能的话我想保留它。
我如何处理修改内容
在游戏的内容文件夹(C:/ Users / username / 4X)中,有一个Mods文件夹。每个mod都有自己的文件夹在Mod目录中。游戏通过一个文件(相反,它会。我还没有实现它),并确定它将加载哪些Mod目录。在弄清楚之后,它会将所有内容加载到游戏中(我可以更详细地解释它是否与主题相关,我只是不想在不必要的事情上占用空间)。
那你的问题是什么?
好吧,mods都有原始资源(.fbx,.wav,.mp3),而且由于我无法加载除XNB文件以外的任何东西,我绝对不知道如何加载mod的内容。好吧,我把它拿回来,我一直在考虑一些解决方案,但我真的不知道哪个更实用,或者是否有更好的方法。
首先,我考虑从Pipeline应用程序中借用一些代码,并在第一次加载时构建所有mod的内容,但我不完全理解Pipeline的代码,我不想搞砸通过部分实施它。
接下来,我考虑过要求mod创建者在发布他们的mod之前使用Pipeline构建他们的内容,但这似乎有点不专业,因为我想拥有一个Mod Creation Engine,所有工具捆绑在一起。这让我回到使用一些Pipeline的代码并将其嵌入到引擎中,但后来我遇到了与我上一个想法相同的问题。
最后,我想到了加载原始内容。但是这个想法有一个明显的缺陷。
所以我想我要问的是:
答案 0 :(得分:0)
您实际上可以直接使用MonoGame加载一些原始内容。例如:
var texture = Content.Load<Texture2D>("raw.png")`
如果你在Content目录中有PNG文件并且如果更新则将其属性设置为Content / Copy,则应该有效。
但请注意,这仅适用于某些内容和某些平台。我知道PNG文件工作,WAV文件工作(但我相信它们必须是单声道44khz)我很确定我有MP3文件工作一次。
你可能会遇到FBX文件和精灵字体的问题。没有什么可以阻止你绕过内容管理器并自己加载它们。我之前已经取得了巨大的成功。
哦,另外我应该提一下,看看TitleContainer.OpenStream方法。这是一种在不编写平台特定代码的情况下读取文件的方法。