找回密码
 立即注册
查看: 210|回复: 0

元宇宙游戏开发 元宇宙NFT游戏开发

[复制链接]
发表于 2022-5-27 12:15 | 显示全部楼层 |阅读模式
如何制作自己的游戏引擎(以及为什么)
所以你正在考虑制作自己的游戏引擎。伟大的!有很多理由想要自己制作一个而不是使用像 Unity 或 Unreal 这样的商业软件。在这篇文章中,我将讨论您可能想要的原因、游戏引擎中需要哪些系统,以及您应该如何进行开发。我不会在这里讨论任何深入的技术细节,这是关于开发游戏引擎的原因和方法,而不是关于如何编写代码的教程。


为什么?
让我们从第一个问题开始,如果你想制作自己的游戏引擎,你应该问自己:为什么? 以下是您可能想要的几个充分理由:
· 新技术:您想制作一款使用当前没有其他引擎支持或在当前状态下无法轻松支持的新技术的游戏。这可能意味着某种大规模的模拟,需要一些金属编码来提高性能(Factorio)或一些不适合任何现有模具的定制东西(Noita,Miegakure),或者希望针对一个奇怪的当前引擎不支持的硬件(Playdate),或其他任何数量的东西。制作自己的引擎是一个很好的理由,因为在这种情况下没有其他选择。
· 专业化:您希望针对您制作的游戏类型优化您的工作流程。您不需要商业游戏引擎中包含的所有功能,并且在考虑您的特定用例时,您可以使您的资产管道/关卡编辑器/任何使用方式更流畅,而不是需要它是通用的。专业化几乎是制作您自己的引擎的必要条件,如果您不专业化它并迎合您的具体用例,您应该首先重新思考为什么要制作引擎。
· 独立性:你不想长期依赖别人的技术。像Unity或Epic这样的公司的激励和价值观并不总是与你自己的一致,你想要控制自己的技术、自己修复错误的能力而不是“等待和希望”,并且知道更新不会完全破坏您当前的项目。你愿意承担开发自己技术的成本,因为从长远来看,不必根据大公司的一时兴起不断改变东西是好事。
· 好奇心/学习:你只是好奇它是如何工作的,以及为什么其他引擎做出了他们所做的某些决定。这是制作自己的游戏引擎的一个很好的理由,实际上也是最好的理由之一。
此外,在我列出清单的同时,这里有几个不好的理由来说明您为什么想要制作自己的游戏引擎。如果其中任何一个是您的(唯一)动机,您应该备份并重新考虑:
· 我可以做得更好:你认为你可以做出比Unity或Unreal(或Godot或GameMaker)更好的东西。你不能。对于特定的用例,可以做出比这些更好的东西(请参阅上面的专业化),但是作为个人或小团队,您不会在通用的东西上与这些竞争。特别是如果您以前从未制作过自己的游戏引擎。
· 这就是真正的程序员所做的:没有“正确的方法”来制作游戏,你不会因为制作自己的引擎而赢得程序员积分。如果您的游戏非常适合现有引擎(我认为 99% 的游戏都适合),那么使用引擎并没有什么可耻的。毕竟,游戏引擎只是制作游戏的工具,它本身不是也不应该成为目标。你用它制作的游戏才是最重要的。
· 节省金钱/时间:您很可能不会。制造引擎需要时间,时间=金钱。与制作自己的技术所需的时间相比,Unity 的成本可以忽略不计。除非您销售 1000 万份 AAA 游戏,否则 Unreal 的 rev 份额可以忽略不计。使用您自己的引擎不会让您自动销售更多游戏副本。虽然从长远来看您可以节省时间,但这通常意味着您的引擎足以让您跨多个项目,同时与商业引擎相比,还为您提供显着的工作流程改进。要做到这一点并不容易,而且如果这是您第一次尝试,您肯定不会(如果您正在做 3D 而不是 2D,则极不可能)。
此外,在权衡所有这些时,您绝对应该考虑自己的经验和目标。如果你没有很多制作游戏的经验,那么制作引擎就会困难得多(无论如何,在尝试制作引擎之前,你一定要获得一些游戏制作经验)。如果你想做 3D,你会比做 2D 困难得多。
对我来说,制作自己的引擎的动机主要是关于新技术和专业化。我来自 Flash 游戏背景,在 00 年代中期/后期制作了相当多的游戏,这是我非常熟悉和享受的工作流程。现有的引擎都不支持导入 Flash 动画,所以我唯一的选择是自己做。能够将 .swf 文件放入我的资源文件夹中并立即在我的游戏代码中使用动画,而无需任何中间步骤将它们导出到精灵表或其他任何东西,这是非常好的。
这些并不是您想要制作自己的游戏引擎的唯一原因。它有很多优点(和缺点),优点是否大于缺点在很大程度上取决于您在一般游戏开发和较低级别编码方面的经验。就像,拥有自己的技术很好,而且不必经常在 google 上搜索可能已经过时的教程,以了解如何在您的引擎中执行某些操作也很好。如果出现问题,能够实际调试游戏的内部结构真是太好了。但是,如果您做出了一些糟糕的设计选择并且一切都完全分崩离析,并且没有在线资源可以帮助您,那也会很糟糕。您拥有完全控制权和全部责任,以及随之而来的所有利弊。


为什么?
在我们讨论如何制作您自己的游戏引擎之前,让我们退后一步,定义游戏引擎究竟是什么,以及游戏引擎应该解决的问题类型。
游戏引擎是您制作游戏的框架。它为您提供了构建游戏的基础,以及组装游戏所需的所有积木和乐高积木。它提供了“游戏逻辑”和“无聊的技术内容”之间的界限,因此您的游戏逻辑代码(实际描述您的游戏是什么、如何控制、对象之间的交互和规则的内容)不需要实际上关心诸如如何将三角形发送到图形卡之类的事情。
游戏引擎实际为您做的事情实际上存在很大差异。其中一些仅仅只是一个用于显示图形的框架,除此之外对您几乎没有什么作用(Flash、Pico-8)。其中一些基本上是一个完整的游戏,或者至少是针对特定类型的高度专业化,在引擎本身(RPGMaker,Ren'Py)中放入了大量常见的游戏逻辑。以及介于两者之间的一切。
游戏引擎本身也倾向于构建在SDL和 OpenGL等甚至更低级别的框架之上,并且包含许多用于音频、物理、数学以及其他任何您认为有用的特殊用途的库。制作自定义游戏引擎并不意味着自己编写每一个小部分,尤其是像 SDL 这样标准和有用的东西。为您的用例组装正确的现有库集也是制作引擎的一部分,并且确实存在可用于您引擎中几乎所有系统的库。 无论如何,考虑到这一点,让我们谈谈我认为您的游戏引擎所需的最基本的功能集。赤裸裸的必需品。开始制作游戏前所需的最低要求。
· 系统初始化:打开一个窗口,获取 OpenGL/DirectX/Vulkan 上下文,初始化音频。SDL 将为您处理所有这些,所以只需使用SDL。就像真的,SDL 在这一点上是自定义引擎的行业标准,没有理由自己做这部分。
· 帧时序控制:您希望游戏以 60fps 的速度运行,因此您需要某种计时器和循环来控制何时发生更新和渲染。
· 输入:您需要能够响应按钮按下。有很多不同的方式来响应按钮按下,也许你只是想能够查询按钮的当前状态,或者你想注册事件,这并不重要。SDL 将向您报告按钮输入,如果您已经将其用于系统初始化,那么您也应该在此处使用它。您可以在此基础上构建一个非常强大且灵活的输入系统,但一开始不需要做任何超出基础的事情。
· 渲染:大多数,可能至少像 75% 的游戏,以某种方式使用图形,这绝对应该是你的引擎的责任。如果您在玩 2D 游戏,那么最低限度的渲染器只需要能够在屏幕上显示简单的带纹理的四边形。着色器、顶点缓冲区、渲染目标、网格、材质等等都很棒,但它们可以在您需要时稍后提供。如果您想使用 OpenGL 或 Vulkan 或其他任何东西来弄脏您的手,那么您绝对可以使用自定义渲染器进行操作,但是再次使用像Ogre3D这样的现有库来覆盖渲染并没有什么可耻的。完全取决于您的目标和需求,以及您真正觉得有兴趣解决的问题。
· 数学与杂项 实用程序:我真的不认为“向量和矩阵数学”是“系统”的全部内容,但作为引擎和游戏代码都可以访问的实用程序库,您可能应该拥有它。加上您在开发过程中发现的任何其他随机有用的函数和公式。STB是您可能需要的随机实用工具的绝佳资源。
此外,这里还有一些系统也是最基本的系统,但您不需要添加它们,直到您真正需要开始使用它们时才需要添加它们。
· 游戏对象/场景管理:在一个大型更新函数中编写所有内容实际上并没有看起来那么糟糕,但是如果您的游戏开始变得有点复杂,您将需要某种系统来处理单个游戏对象和游戏对象集合。在某种程度上,这最终成为您引擎中最重要的系统,因为它驱动着您的游戏逻辑。你的对象是大的继承树吗?它们是否由较小的组件组成?你在用ECS吗?(旁注:除非您有一个非常具体的用例,否则您可能不应该使用“纯”ECS)它们响应什么类型的事件?您如何查询要与之交互的其他对象?你关心内存布局吗?这些都是您的游戏对象/场景管理系统应该涵盖的所有内容。有一些现有的库,特别是对于纯 ECS,对您的游戏代码的外观影响最大,我在这里非常倾向于“自己动手”。依赖现有的解决方案将迫使您不断思考如何将您的游戏逻辑融入该模式。与您通常想要的完全相反。你希望你的引擎被设计成支持你想要表达游戏逻辑的方式,而不是相反。
· 音频:声音效果和音乐在这里是一种独立的系统,尽管两者都归为“音频”。您需要的基本功能是启动和停止音频循环(音乐)的能力以及完整播放单个音效的能力。音频的内容远不止这些,但您可以通过这里的基础知识走得更远。音频的烦人之处在于,行业标准音频框架(FMod和Wwise)都是商业化的,并带有一系列许可限制,但很多开源框架使用起来真的很烦人(向OpenAL 大喊大叫)。就我个人而言,我发现FAudio非常简单而且非常棒,我以此为基础来构建更复杂的行为。
· 文件加载和管理:所有游戏都需要加载文件。您需要一种加载文件的方法。您可能不想冗余地重新加载/解码已经加载的文件,因此您需要某种处理所有这些的基本管理器。您可能希望能够构建 mod 支持或动态加载/卸载或其他任何东西,只要您在这里拥有基础知识并且只通过文件管理器加载文件,您就可以轻松地将您想要的任何其他功能添加到此之后。您不需要立即使用它,因为您可以使用内置文件加载作为占位符,但是一旦您开始更频繁地使用文件,您将希望最终拥有一个文件/资源管理器系统。
· 网络:好的,网络(在线多人游戏)是非常可选的(如果您不需要在线多人游戏,请不要打扰),但是它是一个非常困难的系统,可以装订到没有考虑多人游戏的引擎上,所以如果你在制作多人游戏时,您需要尽早考虑这一点,因为它的存在会影响几乎所有其他系统的设计。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-27 02:41 , Processed in 0.201357 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表