向旧致敬, 拥抱新生 – MonoGame 内容构建工具






4.54/5 (14投票s)
向旧致敬,
我想试着写一篇博客上最长的标题,不确定我是否做到了,但这确实是一次值得的尝试。
内容的世界
在 XNA 的鼎盛时期,我们有一个可爱的小扩展,允许我们为所有的游戏资源创建一个单独的项目,然后用一个指针引用它们,这些就是内容项目!
这些设备非常棒,能够自动编译、压缩并将我们的 XNA 资源构建到我们的项目中。
当 MonoGame 刚起步时,他们试图模仿这一点,但不得不重新使用现有的内容项目设置,仍然使用 XNA 内容项目模板和一个自定义构建的 MSBuild 项目来编译游戏解决方案所需的 XNB 文件。
内容构建完成后,你必须手动将 XNB 输出文件复制或链接到你的游戏解决方案中,这不是一个理想的场景,但为了保持与 XNA 的向后兼容性是必要的。
MGCB 登场——MonoGame 内容构建器工具
在当前 MonoGame 开发的深处,有一个处理内容的新工具,在这个工具内部有大量的增强和改动,以更好地处理内容消费和打包,同时简化在游戏项目中添加和管理内容构建。
与过去的 XNA 内容项目一样,你在工具中创建一个新的资源数据库,照常添加你的内容(为每个文件设置相关的容器导入器类型),然后将项目保存到一个新的“.MGCB”内容项目定义中。有了新的内容定义文件,你最终将其添加到你的项目中,并将其 **构建操作** 设置为“MonoGameContentReference
”,然后就可以成功引用你的内容项目了。
现在我们有进展了,如果一切设置正确,你的内容项目将与你的游戏一起构建(如果没有变化也不会重新构建!),我们几乎实现了与 XNA 时代简单的可比性。
已经有一个 XNA 内容项目了?
如果你已经有一个设置好的 XNA 内容项目,并且不想浪费时间重新构建所有内容!那么 MonoGame 内容构建器工具可以帮你。
使用文件菜单中的“导入”选项,你只需选择一个现有的“.contentproject”,它就会读取旧定义并将所有设置和内容导入到新的内容项目中,就像变魔术一样!
那么为什么大张旗鼓?
那么,除了 卫生设施、医药、教育、葡萄酒、公共秩序、灌溉、道路、淡水系统 和 公共卫生 之外,罗马人还为我们做了什么?(我真的很喜欢蒙提·派森的引语——http://bit.ly/PythonRomans)。
除了一个更简单的系统,为什么要做这一切?答案很简单。使用旧内容构建器解决方案与 XNA 内容项目的最大问题是它只能在 Windows 机器上构建(因为 XNA 的主要支持就在那里)。
然而,有了新的 MGCB 工具,**现在可以在 MonoGame 的所有平台上构建内容了**。
团队仍在努力解决的一个缺点是工具本身。在撰写本文时,该工具仍在开发中,在某些平台上尚未完成。
- Windows – 核心开发平台且是最新的
- Linux – 大部分完成,一些处理器仍需测试/调整
- MacOS / iOS – 目前正在大力开发中
这意味着你不仅可以在项目中构建内容,还可以在各种平台上使用该工具创建内容项目。
实际上,由于“.MGCB”项目文件只是文本,如果你愿意,你也可以手动配置它,但我不会推荐这样做。
MGCB 入门
如果你现在想使用 MGCB 工具,你可以,你只需要最新的 MonoGame 安装程序,可以在主 MonoGame 下载页面的 **开发版本** 部分找到,这里有适用于 Windows、Linux 和 Mac 的 Visual Studio 和 MonoDevelop 的安装程序。
http://www.monogame.net/downloads/
安装完成后,你将拥有当前版本的 MGCB 工具。此外,所有 MonoGame 项目模板都已更新,包括一个 MGCB 内容项目定义,你可以编辑它并添加你的内容。
在 Windows 上,当前模板列表包括
*注意,在 Windows 上使用 Android、Ouya 和 iOS 模板仍然需要 XAMARIN 的扩展。Android 仍可以使用 Windows 上的 MonoDevelop 构建。
启动任何新解决方案,它将看起来像前面“MGCB 登场”部分所示的项目解决方案。
示例更新
还有更多!多平台示例也已更新,以使用新的内容构建器工具,你可以在这里找到它们
https://github.com/Mono-Game/MonoGame.Samples
在这里,你将找到我们 3 个主要示例的不同开发阶段。
- Platformer 2D 示例 – 在所有平台上都能完美运行!
- Neon Shooter 示例 – 在 Windows GL 上运行,但已准备好更新到所有平台
- SpaceWar 示例 – 一个开发测试平台,因为它有一些领先的内容/开发需求。(更新后目前无法运行,但工作仍在继续——这是一个很大的示例)
团队将继续推进示例集,作为“最佳实践”示例,展示如何让你的游戏在所有平台上运行,并展示组织多平台项目的最佳方式。
是的,我们仍在努力完成每个示例的文档,这是一项艰巨的工作,每个人都有时间限制。如果你能帮忙,请伸出援手!
值得注意的是,每个示例只有一个内容项目,该项目由所有平台共享,并在构建时为正确的平台构建!
没预料到吧?
升级你的项目
现在已经可以升级你的项目以使用新的内容构建器工具,但目前这是一个手动过程。不过,只需几个步骤即可完成。
*注意,在撰写本文时,MGCB 工具仅在 Windows 平台下完全可用,你仍然需要一台 Windows 机器来编辑 MGCB 配置。请持续关注网站以获取完整的 Linux 和 MacOS 支持。
然而,内容项目可以工作并为所有平台构建内容。
- 安装最新的开发安装程序(安装工具本身需要)——如果你已经安装了旧的安装程序,我们建议先卸载它。
- 备份你现有的项目,如果你使用源代码控制,请先将你的最新更改推送到服务器。
如果你不使用源代码控制!!!请开始使用吧!(你疯了吗?)另外,再做一个备份“以防万一”(你永远不会太小心)。 - 排除/删除你为发布内容而设置的任何内容/链接/构建过程。
只需将任何预先构建的 XNB 文件移到别处,如果你有复制它们的构建脚本,请删除脚本。如果你正在链接 XNB 文件,请从你的项目中删除链接。这应该会让你的项目处于一个干净的状态,没有任何内容。 - 保存你的项目——接下来是棘手的部分——手动编辑你的 csproj 文件(项目文件)。
- 用你喜欢的文本编辑器打开项目文件(.csproj)(或者使用 VS powertools 的“编辑项目文件”功能)。
你可以在 Visual Studio 扩展库中找到 VS powertools,点击“工具 -> 扩展和更新”(在 VS 菜单中),然后搜索 power tools。 - 在第一个
<PropertyGroup>
部分的末尾,添加一个新的<MonoGamePlatform>
部分,如下所示:<PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">x86</Platform> <ProductVersion>8.0.30703</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{CAF988BD-5440-405D-95D5-BCAB25FC5240}</ProjectGuid> <OutputType>WinExe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>Platformer2D</RootNamespace> <AssemblyName>Platformer2D</AssemblyName> <FileAlignment>512</FileAlignment> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\..\</SolutionDir> <RestorePackages>true</RestorePackages> <NuGetPackageImportStamp>5c48b287</NuGetPackageImportStamp> <MonoGamePlatform>WindowsGL</MonoGamePlatform> </PropertyGroup>
- 将平台名称设置为你的项目文件所针对的平台,选项包括:
Android, iOS, Linux, MacOSX, NativeClient, Ouya, PlayStation4, PlayStationMobile, RaspberryPi, Windows, WindowsGL, WindowsPhone, WindowsPhone8, WindowsStoreApp, Xbox360。
注意,对于 Windows 8,你应该使用 **Windows** 目标。WindowsStoreApp 是用于 8.1 游戏或通用 Windows 目标的。 - 在项目文件末尾,在
</Project>
标记之前(最好与其他<Import>
部分放在一起),添加以下行:<Import Project="$(MSBuildExtensionsPath)\MonoGame\v3.0\MonoGame.Content.Builder.targets" />
这将启用“
MonoGameContentReference
”构建操作的出现并启用该工具。 - 在你的“Content”文件夹中添加一个新文本文件,并将其扩展名重命名为“.mgcb”(例如“Content\mycontent.mgcb”)——这是创建新 MGCB 项目的最简单方法。
注意,你应该会看到一个新图标出现。如果没有,请检查你的 MonoGame 安装程序安装,**确保它是开发版本而不是 3.2 版本**。 - 双击 MGCB 内容文件,打开 MGCB 工具,手动添加你的资源或从旧的“.contentproject”导入。
*注意,在撰写本文时,MGCB 工具存在一个 bug,它并不总是打开启动它的文件。在工具中,只需手动检查并打开它即可确保。希望很快能修复!
完成以上所有操作后,保存你的项目文件并在你的代码编辑器中重新加载项目。
现在构建你的项目,它将自动输出你的编译项目以及编译好的资源,无需再链接文件或依赖单独的或脚本化的资源构建。
啊,然而为了玫瑰
由于这仍然是该工具的开发版本,因此存在一些注意事项。
- 它还没有 100% 完成,可能存在 bug(不过,你会注意到 Platformer 示例已全部更新,构建良好并在所有平台上运行!)。
- XACT 项目不受支持(实际上发现 XNA 甚至都不处理 XACT,它们只是被推到另一边了!奇怪的是你发现了什么),只需单独添加你的音频文件,并像往常一样使用
Content.Load<Song>
等。 - Linux 工具几乎完成了——为什么不帮忙测试一下呢?
- 如上所述,MGCB 工具并不总是打开你启动它的文件。在进行更改之前,只需确保你正在查看正确的内容文件。为了安全起见,只需从工具中手动打开它(这是 Andy 和 Tom 在一次直播中发现的,很有趣
)。
- 多平台内容现在易如反掌!玩得开心。
如果你有任何进一步的问题/疑问/牢骚或喜欢折腾,那么请到 GitHub 网站,测试并报告问题(只在你发现问题时报告,诸如“多么棒的工具”之类的评论很好但没有帮助!)。
加入进来,参与进来!
*在本文的制作过程中没有代码受到伤害,但为了它们的汁液,许多爪哇豆惨遭屠杀!