棒!使用.NET Core构建3D游戏引擎

原文地址:https://mellinoe.wordpress.com/2017/01/18/net-core-game-engine/
作者:ERIC MELLINO
翻译:杨晓东(Savorboard)

译者序

通过翻译这篇文章,我感受到了 .NET Core 真正的魅力,它真的是无所不能,相信在以后,.NET Core 一定会大放异彩,而.NET的 开源也会吸引越来越来的开发者参与其中。

同时,就像作者所说,这赋予给了 .NET Core 另外一种道路和生命,感谢这个路上的先行者。

正文

很多人对于 .NET Core 都很关心,但是通常我们都在谈论关于控制台应用程序和服务器端应用程序。在这篇博客中,我们将探讨 .NET Core 的另外一个用途,并展示我如何从头构建一个3D平台的游戏引擎,编辑器和游戏。作为一个 .NET 团队中的开发,我已经和社区做了很多的讨论并且已经看到了关于这方面的内容。我希望通过这篇博客能够阐述 .NET Core的功能,并且激励更多的人来做这方面的探索。

在第一篇博客中,我将介绍我的游戏(Creazy Core),一个类似街机的3D 平台的游戏,在这个游戏里,你通过控制一个球来穿越各种障碍物。这也许看起来很宽泛,稍后的博客中中,我将对关于游戏的引擎,编辑器和更多技术细节来做更加详细的介绍,如他们能够融合并工作起来。

免责声明:这只是一个从头开始构建的单人开发的游戏。很明显,这个游戏没有任何商业用途,我不能保证在观看原始的作品时候不会受到伤害。

Creazy Core

https://github.com/mellinoe/CrazyCore

Windows.zip

OSX.zip

Ubuntu-1604.zip

这是一个独立的程序,你只需要下载对应平台的 ZIP 文件包,然后运行 Creazy Core 可执行程序。如果你在 Ubuntu 上运行,则有一些先决条件。

译者注:使用 dotnet CreazyCore.dll 运行程序。 macOS 可以直接运行。

这个游戏的机制就是利用力学来控制一个小球,在一个3D 的世界里运行,游戏世界起初很简单,后来逐渐会有更加复杂的力学会引入进来,游戏环境和障碍物也越来越复杂,由于你的进步,游戏会变得越来越难,直到最后会有一些“疯狂的”力学机制加入。

为什么使用 .NET Core ?

首先,这是一个使用 .NET Core 的另外一种伟大的方式。它打破了 .NET Core 原有的路线来探寻一个新的场景。虽然我可能会有点偏见,但是我认为使用 .NET Core 来做游戏是有很多优势的:

  • 开源。您可以查看,修改和优化整个栈的任何部分。
  • 优秀,针对多平台设计的优化的运行时。这意味着当在不同平台上发布时,不必担心兼容性。
  • 它是.NET。 您可以使用任何.NET语言和所有伟大的可以用的工具以及调试经验。
  • 面向未来。.NET Core正在快速发展,并且每天都在合并进来性能优化的代码。另一方面,CoreRT项目将是用于构建游戏的一个非常有趣的技术。虽然还没有准备好迎接黄金时段,但是提供大量优化的,预编译的二进制文件的能力将对游戏非常有用。

游戏引擎架构

同其他游戏引擎一样,这里也是由大量不同的组件构成的,这使得实时3D 游戏引擎成为可能。我希望我在后续的博客中能够更多的探讨关于这方面更加详细的内容。但是为了给出游戏引擎中涉及到的一些功能和概念,这里我强调一些重要的事情。

  • 引擎是基于组件的,它具有与 Unity 非常相似的编程模型。
  • 同时支持 Direct3D11(Windows)和 OpenGL (所有平台) 的图形。图形是针对无关平台的上层api抽象层,它叫做“Veldrid”。
  • 同时支持 XAudio2(Windows)和 OpenAL(所有平台)的音频。有另外一个(更轻量)抽象层,它允许 API为引擎中的3D位置音频提供支撑。
  • 由 OpenTK 库提供窗口化和输入的处理。
  • 使用很棒的 BEPUphysics 库来处理实时的 3D 物理特效。
  • 自定义的序列化系统和资源管理器,用于存储各种资源,包括:
    • 二进制资源(模型,纹理,音频)等。
    • 实体和组件状态。
    • 场景构成以及链接器。
    • 元数据信息,比如玩家的进度以及最高分数等。
    • 项目设置。

为了构建不同级别的游戏,我编写了一个单独的编辑器 程序,它重用了引擎的各个组件。编辑器是一个独立的3D 程序,你可以查看和修改游戏资源,组合游戏实体,构建完整的场景,以及管理项目中的配置选项。

以下视频链接到 YouTube ,请科学观看。

就想一个典型的编辑器一样,游戏本身可以在应用程序内测试,并且各种游戏状态可以实时调整。编辑器还具有项目发布,调试,代码热插拔等功能。

以下视频链接到 YouTube ,请科学观看。

上面的视频显示了一些很酷的事情,你可以在编辑器中调整东西。

编辑器其中一个最有用的功能是,它可以在多个平台运行,因为它也是使用的 .NET Core 开发。这使得他可以非常容易的进行一些修改和测试并且方便的应用到游戏中去。

开源库

下面是我这个项目中使用到的库,以及这些库是做什么的。所有对.NET 游戏相关感兴趣的都可以看看这些库,他们非常酷!

  • SharpDX -封装Direct3D11和XAudio2。这些技术仅限于Windows,并且在引擎中默认使用。SharpDX已经支持PCL配置文件,因此它可以在.NET Core上原封不变地使用。
  • OpenTK -封装OpenGL和OpenAL的(对于上面的替代),以及窗口化和输入。这个库相当大,相当老; 编译为.NET Core它还需要再做一些工作。
  • ImageSharp -跨平台的加载图像的库。这是用来加载游戏中使用的所有纹理。James 对这个项目做了非常伟大的一些工作。
  • BEPUphysics -实时3D物理特效。这是一个非常酷并且精心设计的库。它最近搬到了GitHub,v2.0计划了一些非常有趣的功能。
  • dear imgui -Immediate模式的UI,使用图形用户界面的编辑器,并为 Creazy Core 提供了菜单。我使用 C# 移植的一个 C++ 库(ImGui.NET)。
  • SharpFont - TrueType字体加载及渲染。这用于引擎中的一些2D文本组件呈现。
  • Newtonsoft.Json -我想大家都知道这个库。我使用它来序列化我引擎中的所有自定义数据类型,包括实体,组件及场景数据。

谢谢阅读!我希望这篇文章已经阐明了.NET Core 在今天可以做的一些事情。在下一篇文章中,我将详细介绍如何在引擎中处理3D渲染。它是引擎中最复杂的部分,但也是开发中最有趣的一部分。敬请关注!


本文地址:http://www.cnblogs.com/savorboard/p/net-core-game-engine.html
本译文仅用于学习和交流目的。非商业转载请注明译者、出处,并保留文章在译言的完整链接。

posted @ 2017-01-28 21:31  Savorboard  阅读(9853)  评论(18编辑  收藏  举报