65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (14投票s)

2014年12月17日

CPOL

9分钟阅读

viewsIcon

33467

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

我想试着写一篇博客上最长的标题,不确定我是否做到了,但这确实是一次值得的尝试。

内容的世界

在 XNA 的鼎盛时期,我们有一个可爱的小扩展,允许我们为所有的游戏资源创建一个单独的项目,然后用一个指针引用它们,这些就是内容项目!

XNA 内容项目和内容引用

这些设备非常棒,能够自动编译、压缩并将我们的 XNA 资源构建到我们的项目中。

MonoGame 刚起步时,他们试图模仿这一点,但不得不重新使用现有的内容项目设置,仍然使用 XNA 内容项目模板和一个自定义构建的 MSBuild 项目来编译游戏解决方案所需的 XNB 文件。

MonoGame 内容构建器项目及其 XNA 内容项目

内容构建完成后,你必须手动将 XNB 输出文件复制或链接到你的游戏解决方案中,这不是一个理想的场景,但为了保持与 XNA 的向后兼容性是必要的。


MGCB 登场——MonoGame 内容构建器工具

MonoGame 内容构建器工具 (MGCB)

在当前 MonoGame 开发的深处,有一个处理内容的新工具,在这个工具内部有大量的增强和改动,以更好地处理内容消费和打包,同时简化在游戏项目中添加和管理内容构建。

与过去的 XNA 内容项目一样,你在工具中创建一个新的资源数据库,照常添加你的内容(为每个文件设置相关的容​​器导入器类型),然后将项目保存到一个新的“.MGCB”内容项目定义中。有了新的内容定义文件,你最终将其添加到你的项目中,并将其 **构建操作** 设置为“MonoGameContentReference”,然后就可以成功引用你的内容项目了。

新的 MGCB 内容引用

现在我们有进展了,如果一切设置正确,你的内容项目将与你的游戏一起构建(如果没有变化也不会重新构建!),我们几乎实现了与 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 支持。
然而,内容项目可以工作并为所有平台构建内容。

  1. 安装最新的开发安装程序(安装工具本身需要)——如果你已经安装了旧的安装程序,我们建议先卸载它。
  2. 备份你现有的项目,如果你使用源代码控制,请先将你的最新更改推送到服务器。
    如果你不使用源代码控制!!!请开始使用吧!(你疯了吗?)另外,再做一个备份“以防万一”(你永远不会太小心)。
  3. 排除/删除你为发布内容而设置的任何内容/链接/构建过程。
    只需将任何预先构建的 XNB 文件移到别处,如果你有复制它们的构建脚本,请删除脚本。如果你正在链接 XNB 文件,请从你的项目中删除链接。这应该会让你的项目处于一个干净的状态,没有任何内容。
  4. 保存你的项目——接下来是棘手的部分——手动编辑你的 csproj 文件(项目文件)。
  5. 用你喜欢的文本编辑器打开项目文件(.csproj)(或者使用 VS powertools 的“编辑项目文件”功能)。
    你可以在 Visual Studio 扩展库中找到 VS powertools,点击“工具 -> 扩展和更新”(在 VS 菜单中),然后搜索 power tools。
  6. 在第一个 <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>
  7. 将平台名称设置为你的项目文件所针对的平台,选项包括:
    Android, iOS, Linux, MacOSX, NativeClient, Ouya, PlayStation4, PlayStationMobile, RaspberryPi, Windows, WindowsGL, WindowsPhone, WindowsPhone8, WindowsStoreApp, Xbox360。
    注意,对于 Windows 8,你应该使用 **Windows** 目标。WindowsStoreApp 是用于 8.1 游戏或通用 Windows 目标的。
  8. 在项目文件末尾,在 </Project> 标记之前(最好与其他 <Import> 部分放在一起),添加以下行:
    <Import Project="$(MSBuildExtensionsPath)\MonoGame\v3.0\MonoGame.Content.Builder.targets" />

    这将启用“MonoGameContentReference”构建操作的出现并启用该工具。

  9. 在你的“Content”文件夹中添加一个新文本文件,并将其扩展名重命名为“.mgcb”(例如“Content\mycontent.mgcb”)——这是创建新 MGCB 项目的最简单方法。
    注意,你应该会看到一个新图标出现。如果没有,请检查你的 MonoGame 安装程序安装,**确保它是开发版本而不是 3.2 版本**。
  10. 双击 MGCB 内容文件,打开 MGCB 工具,手动添加你的资源或从旧的“.contentproject”导入。

*注意,在撰写本文时,MGCB 工具存在一个 bug,它并不总是打开启动它的文件。在工具中,只需手动检查并打开它即可确保。希望很快能修复!

完成以上所有操作后,保存你的项目文件并在你的代码编辑器中重新加载项目。

现在构建你的项目,它将自动输出你的编译项目以及编译好的资源,无需再链接文件或依赖单独的或脚本化的资源构建。


啊,然而为了玫瑰

由于这仍然是该工具的开发版本,因此存在一些注意事项。

  1. 它还没有 100% 完成,可能存在 bug(不过,你会注意到 Platformer 示例已全部更新,构建良好并在所有平台上运行!)。
  2. XACT 项目不受支持(实际上发现 XNA 甚至都不处理 XACT,它们只是被推到另一边了!奇怪的是你发现了什么),只需单独添加你的音频文件,并像往常一样使用 Content.Load<Song> 等。
  3. Linux 工具几乎完成了——为什么不帮忙测试一下呢?
  4. 如上所述,MGCB 工具并不总是打开你启动它的文件。在进行更改之前,只需确保你正在查看正确的内容文件。为了安全起见,只需从工具中手动打开它(这是 Andy 和 Tom 在一次直播中发现的,很有趣)。
  5. 多平台内容现在易如反掌!玩得开心。

如果你有任何进一步的问题/疑问/牢骚或喜欢折腾,那么请到 GitHub 网站,测试并报告问题(只在你发现问题时报告,诸如“多么棒的工具”之类的评论很好但没有帮助!)。

加入进来,参与进来!

*在本文的制作过程中没有代码受到伤害,但为了它们的汁液,许多爪哇豆惨遭屠杀!

万岁,旧的和新的——MonoGame 内容构建器工具 - CodeProject - 代码之家
© . All rights reserved.