原文地址: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
本译文仅用于学习和交流目的。非商业转载请注明译者、出处,并保留文章在译言的完整链接。

棒!使用.NET Core构建3D游戏引擎的更多相关文章

  1. 排名前10的H5、Js 3D游戏引擎和框架

    由于很多人都在用JavaScript.HTML5和WebGL技术创建基于浏览器的3D游戏,所有JavaScript 3D游戏引擎是一个人们主题.基于浏览器的游戏最棒的地方是平台独立,它们能在iOS.A ...

  2. Java 3D游戏引擎——JME(java Monkey Engine)

    转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java ...

  3. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  4. 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!

    喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课,让您度过一个充实的暑假~ 參与本次公开课,即有机会获得50C币! 答疑公开课时间:7月18日 晚7:30-9 ...

  5. 【直播预告】7月25日3D游戏引擎免费公开课答疑第三期,有奖问答!

    喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课.让您度过一个充实的暑假~ 參与本次公开课,进行有奖问答.即有机会获奖. 答疑公开课时间:7月25日 晚7:3 ...

  6. 3D游戏引擎设计 实时计算机图形学的应用方法 第2版 pdf 带索引书签目录

    3D游戏引擎设计  实时计算机图形学的应用方法  第2版 目录 第1章 概述1.1 图形硬件和游戏发展史1.2 本书版本与软件发展史1.3 章节导读 第2章 图形系统2.1 基础知识2.1.1 坐标系 ...

  7. 基于Java的开源3D游戏引擎jMonkeyEngine

    jMonkeyEngine简介 jMonkeyEngine是一款纯Java语言编写的游戏引擎,继承了Java应用跨平台的特性,而且是开放源代码的,遵循BSD开源协议,BSD开源协议用一句简单的话概括就 ...

  8. 开源3D游戏引擎Irrlicht简介

    Irrlicht简介 Irrlicht在国内也被叫做"鬼火"引擎,是一款用C++编写的开放源代码的高性能游戏引擎.而且是跨平台的,具有很好的移植性,Irrlicht支持OpenGl ...

  9. 3D游戏引擎中常见的三维场景管理方法

    对于一个有很多物体的3D场景来说,渲染这个场景最简单的方式就是用一个List将这些物体进行存储,并送入GPU进行渲染.当然,这种做法在效率上来说是相当低下的,因为真正需要渲染的物体应该是视椎体内的物体 ...

随机推荐

  1. The 2014 ACMICPC Asia Regional Xian Online

    [A]签到题 [B]后缀数组 [C]染色,DP(感觉可出) [D]BFS搜索,有点麻烦 [E]博弈论,Nim博弈 [F]BFS状态搜索 [G]概率DP+状态压缩 [H]异或+构造 [I]矩阵快速幂(队 ...

  2. JAVA基础--正则表达式

    .  any character \d  A digit 0-9 \D  a non-digit [^0-9] \s  a whitespace character, 空白字符 \S  a non-w ...

  3. flex中Event类的使用

    当您创建自己的自定义 Event 类时,必须覆盖继承的 Event.clone() 方法,以复制自定义类的属性.如果您未设置在事件子类中添加的所有属性,则当侦听器处理重新分派的事件时,这些属性将不会有 ...

  4. Education Round16

    A题:题意:给定国际象棋king的坐标,求能向几个方向移动分析:处理一下边界情况,其他的都是8 #include <iostream> #include <cstdio> #i ...

  5. 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误

    在Java中修饰符总共有一下几种: 1.访问控制修饰符    分别有:public private protected,缺省 2.其它修饰符      分别有:abstract,final,stati ...

  6. (简单) POJ 1797 Heavy Transportation,Dijkstra。

    Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can no ...

  7. linux 驱动入门5

    慢慢的开始转驱动,目前比较有时间,一定要把驱动学会.哎.人生慢慢路,一回头.已经工作了八九年了.努力.在买套房.改退休了.学驱动.个人认为首先要熟悉驱动框架.慢慢来.心急吃不了热豆腐. 看网上都说的设 ...

  8. iOS 添加导航按钮

    iOS设置导航按钮navigationBar中包含了这几个重要组成部分:leftBarButtonItem, rightBarButtonItem, backBarButtonItem, title. ...

  9. ucos移植指南

    指定堆栈数据类型(宽度) typedef unsigned int OS_STK; 指定Ucos移植方法3中保存cpu状态寄存器的变量的宽度 typedef unsigned int OS_CPU_S ...

  10. ndk-stack 调试 android c++ 代码崩溃位置

    在android下面使用jni来调用c++,在开发游戏是非常正常的.但是要调试c++部分却是非常麻烦的问题.如果快速定位崩溃位置呢.NDK提供了一个小工具ndk-stack. 首先,我们先配置环境,把 ...