原文地址:https://mellinoe.wordpress.com/2017/01/18/net core game engine/ 作者:ERIC MELLINO 翻譯: "楊曉東(Savorboard)" 譯者序 通過翻譯這篇文章,我感受到了 .NET Core 真正的魅力,它真的是無所不能 ...
原文地址: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
這是一個獨立的程式,你只需要下載對應平臺的 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
本譯文僅用於學習和交流目的。非商業轉載請註明譯者、出處,並保留文章在譯言的完整鏈接。