所以,你想进入游戏开发。或者,更具体和简单:您想成为一名从事技术方面工作的游戏开发人员。好吧,任何人都会有关于如何做到这一点的疑问!
例如:
关于这些主题的信息有大量——如此之多,以至于很容易让你的大脑超负荷,从而很难做出有价值的选择。
我叫 Andrey Mikheev,是 Pixonic MY.GAMES 的高级后端开发人员。我从事游戏行业已有 20 年了。我第一次尝试在 90 年代使用当时流行的 ZX Spectrum 制作游戏。在本文中,我将阐述切换到游戏开发时的选项,并解释这些选项的不同之处。
在这篇文章中,我们将假设读者刚刚开始进入该行业。同时学习所有内容是不可能的,因此您必须确定优先顺序并选择如何进行学习。当然,每个人都有不同的经历;这一职业的发展道路不止一种。
游戏开发(以及 IT 的许多其他领域)的美妙之处在于,您可以在许多领域应用您的技能:您可以成为制作人、营销人员、艺术家、设计师、编剧、建模师、分析师、客户端开发人员,核心开发人员、元服务开发人员、渲染开发人员等。事实上,在独立游戏的世界中,你几乎必须结合几乎所有上述技能 - 但这是另一天的话题。
当考虑开始游戏开发职业时,人们通常会关注技术方面:要掌握的引擎、首先要选择的编程语言或要练习的特定技能。
但请记住,技术只是一种工具;您不必围绕特定事物构建您作为开发人员的整个身份;机械师不是扳手。今天是十字螺丝刀,明天是电动螺丝刀,后天是气动工具。目标不是学习如何使用特定的螺丝刀,而是了解汽车的结构以及如何组装和修理它们。
用游戏引擎、编码语言和其他东西取代这些扳手——这一点不会改变。这些只是供您使用的工具
所以,在我看来,通用技能是现阶段最重要的。因为你的任务不是创建“游戏”,而是编写好的代码。
我们的目标不是制作一款价值十亿美元的热门游戏,而是作为一名开发者成长。无论如何,制作一款价值十亿美元的游戏并不在于开发,而在于创意和营销;代码是次要的。当然,这两个目标并不相互矛盾,但我不会将惊人的成功作为你的第一个目标——这样做,你很快就会发现自己对整个企业感到失望。
回到代码主题,对代码的普遍关注很重要,因为任何行业都对高质量代码有很大的需求,这有很多应用:游戏、金融科技、机器人控制算法、将火箭发射到太空。有些人可能会说高质量的代码意味着巨大的延迟,而时间对于这个行业来说是关键。别相信。如果你能写出好的代码,就不会有停机时间。
另一件事是,如果你的代码很草率,那么要创建高质量的产品,你就必须纠正你的习惯,这将需要大量的时间和精力。
另一个非常重要的一点是时间安排:创建好的代码所花费的时间总是会被维护代码所花费的时间的减少所抵消。毕竟,游戏,尤其是多人游戏,是一种长寿的产品,在这种情况下,代码的质量非常重要。
其他专家应该能够轻松理解您的代码,能够对其进行调整,而无需重写它。如果您突然决定在几年内更改某些内容,您也应该能够轻松阅读它。举个粗略的例子:花几个月的时间编写一次高质量的代码,并能够在几天内快速进行一些更改,而不是在一周内编写一些难以理解的东西,然后每个小细节都需要一个月的时间将来编辑。
简而言之,干净的代码、干净的架构、ECS、SOLID、KISS、OOP、算法和数据结构——如果你想成为游戏开发领域的优秀技术专家,所有这些主题都应该特别关注。
是的,算法可能会让一些人头疼。但游戏开发中的这些“算法和结构”比典型的 Web 项目要多得多,如果你掌握了它们,它们将大大简化你的生活。
当然,只有通过经验才能对这些概念有更深刻的理解。随着时间的推移,您将参与各种项目,您将开始了解其他专家的工作方式,并了解在处理游戏代码时您个人遇到的问题。
学习他人的经验至关重要。研究开源项目,聆听行业专家的讲座,并记住,现在有很多可用的信息源。但你不应该做的是沉浸在你的项目中,尤其是当你的团队中没有好的导师时。没有一个有能力的开发人员可以在真空中工作。这里最重要的是不要做得太过分,在不了解自己在做什么以及为什么这样做的情况下就开始使用其他项目的代码。
还有一点很重要:重写代码是正常的,不要害怕这样做。而且,在训练期间,这一点至关重要。您将看到如何使用良好实践来改进代码并使其更易于维护。
提高一般编程技能的过程并不快。这可能需要几个月甚至几年的时间。因此,请为此做好准备,因为没有它您就无法生存。
如果你有机会在好的工作室实习,这将大大加快你的成长。您将有机会学习游戏开发的各个方面,并从导师那里获得问题的答案。但老实说,这不是最常见的方式。
从头开始在游戏行业寻找第一份工作是另一个挑战。著名的悖论:要找到工作,你需要经验,而要获得经验,你需要工作。在这种情况下,自学就值得考虑了。让我们立即放弃付费课程的想法:由于多种原因,它们并不适合所有人。幸运的是,互联网上有数十个和数百个关于游戏编码各个方面的指南。
一旦您自己回答了这些基本问题并了解了您将学习什么以及如何学习,就可以决定您将使用哪种游戏引擎,这也将决定您必须学习的编程语言。
这个主题太广泛了,无法用一篇文章来涵盖。此外,作为开发人员,我们对引擎的兴趣不如对编程语言的兴趣。如果您想深入研究该主题,我建议您阅读此内容
在您的旅程开始时,您不必立即选择一些大型且严肃的引擎,例如虚幻引擎或Unity。如果您没有任何理论或实践背景,一些网页游戏引擎就足够了:比如 PlayCanvas 或其类似物。
Defold 引擎也是一个不错的入门选择。它比 Unity 更简单,更专注于 2D 游戏。它使用一种非常简单的语言Lua,易于学习。
为了节省您的时间,我将简单地描述这些语言的某些方面,并按照我将要学习的优先顺序排列它们;这个顺序并不代表语言的质量或其问题。相反,这是我对语言的复杂性、相关性和功能之间的平衡的评估。
例如,Lua是一种非常有趣的语言,易于学习,您可以使用Defold引擎用它编写游戏。但你不能选择它作为你开发体验的主要语言。它是一种辅助语言,与C++或 C# 等更流行的语言一起使用。
当然,这并不是所有编程语言的完整列表。他们有十多个。但这就是我想向你指出的。所以,这是我要学习的内容以及顺序:
C#:如果你打算长期认真地从事开发工作,那么最好从流行的通用语言开始。 C# 就是其中之一。它也是一种适合您后备计划的语言:即使您突然对游戏开发感到厌倦,您也可以用 C# 编写各种软件,例如金融科技、商业应用程序等。
C# 将使您能够熟悉标准编程概念并实施各种开发方法。您将了解所有那些看似可怕的缩写,例如 OOP、CQRS、DDD、ECS。当然,这些方法中的大多数都可以用任何编程语言来实现。但也存在细微差别。例如,并非所有语言都有“类”的概念,因此,这些概念的实现方式也不同。这可能会让新手开发人员大吃一惊,并产生一系列不必要的问题,包括动机问题。因此,在我看来,与 JavaScript 等语言相比,C# 是开始开发职业生涯的最佳(但不是最简单)选择。
Java :与 C# 一样, Java是一种通用语言。但在游戏开发中,它主要与服务器有关。当然,也有 Java 游戏引擎(例如 LibGDX),但它们在游戏开发方面不像 Unity 那样流行。
同样,这些通用语言非常适合您已经了解 Java,但在金融科技领域工作,然后突然决定制作游戏的情况。你不会想仅仅为了实验而从头开始学习一门新语言,对吗?
JavaScript :正如 Stack Overflow 创始人之一 Jeff Atwood 所说,“任何可以用 JavaScript 编写的东西都将用JavaScript 编写。 ”
越来越多的游戏项目是用这种语言编写的,这令人悲伤,但却是事实。事实上,JavaScript 非常简单,尤其是对于初学者来说。如果您使用某种网络引擎,您甚至很可能会被告知在哪里输入代码行。
尽管 JavaScript 很简单,但我认为它并不是开始游戏开发之旅的好地方。它与其他通用语言有太大不同,这可能会欺骗开发人员。有一种想法是开发人员根据他们的第一种编程语言中的概念来思考。这是有一定道理的,所以一开始最好学习更通用的技术和方法。但如果您决定开始玩网页游戏,那么如果没有 JavaScript,您可能无法顺利进行。它统治着网络世界。在这种情况下,我建议你关注 TypeScript。这种语言与 C# 非常相似,将来切换到另一种语言会更容易。
Lua/Python:为什么我把它们放在一起?这些是脚本语言,通常用于编写游戏逻辑的各个部分的脚本。 (是的,有像 Defold 这样的引擎,它们是主要的开发语言。但这些是规则的例外。)例如, Python是一种非常流行的内联脚本工具,它在 Blender 3D 编辑器中使用。
了解并能够使用 Lua 和 Python 很有用,但正如我之前提到的,它们是辅助语言,我会保留它们以备后用。当然,除非你为你的第一个项目选择了 Defold 引擎,否则 Lua 是不可或缺的。
C++ :有些人可能会惊讶于 C++ 位于列表的底部。并不是因为语言不好,而是它的路最艰难。这是所提供的语言中最强大的语言,但也是最复杂的,有自己的特点。
C++ 用于制作 AAA 游戏,它可以充分利用硬件。但我不会向新手开发人员建议这样做——很有可能你会对这个行业感到失望。但是,如果您真正知道 C++ 是您真正需要的 — 并且您不害怕所涉及的困难并且您有明确的行动计划 — 那么就继续吧!
选择编程语言很重要,但不要忘记,首先也是最重要的是您应该提高您的技术英语水平 - 它将帮助您浏览指南、课程和其他有价值信息的来源
在我看来,这是游戏开发者必须做出的下一个决定。 (这与开发手机游戏、AAA 游戏或网页游戏之间的选择不同。)原因很简单:在你的旅程的一开始,你几乎肯定不会选择制作大型游戏。想想看,如果你没有任何经验,你怎么能参与某种《逃离塔科夫》或《使命召唤》呢?你的第一个游戏不应该太大和复杂,否则你将无法完成它。你只会精疲力尽并离开游戏开发。
准确地了解您想做什么是很好的。对于经验丰富的开发人员来说,这并不是那么重要,但在一开始,这个问题的答案会缩小可能的研究途径。
就单人游戏与多人游戏而言:从客户端开发(即游戏中与玩家直接交互的部分)的角度来看,对于开发者来说差异可能没有那么大。但多人游戏需要后端以及与之相关的所有问题,这也是一个单独且广泛的主题。
单人游戏在这方面更容易,因为您不必担心为其他玩家同步世界状态、分离游戏逻辑或其他此类问题。
在游戏机制方面,单人游戏也可以比多人游戏简单得多——项目越简单,你就越容易完成它。完成你开始的事情是任何企业的一项关键技能!
总而言之,我建议从单人游戏开始——它会更容易。但如果你真的想制作一些简单的多人游戏来与朋友一起玩,那为什么不呢?您只需要了解这将需要更多时间来获得您的第一个工作版本。然而,一个人的内在驱动力是一件非常复杂的事情——也许制作网络游戏比单人游戏更能激励你,增加完成第一个项目的机会。
好了,我们来到了主要问题——如果你想做游戏,到底从哪里开始呢?
假设我们首先已经大致了解了我们想要制作的游戏类型。我们知道主要使用哪种编程语言以及它们使用在什么引擎中。这是必须选择这种语言和引擎的阶段。 (我建议从 C# 开始。您需要 C++ 来创建 AAA 级热门产品,但让我们将其留到以后获得经验时再使用。)因此,我们的语言引擎组合可能是 C# + Unity 。这些都是有需求的,是一个很好的选择。
这是很重要的一点:不要从引擎开始,先选择语言。没有语言,你根本无法有效地学习引擎;您根本无法理解示例和文档中的任何内容,您只会感到困惑。理想情况下,在掌握游戏引擎语言并能够自信地编写简单程序之前,您不会开始学习游戏引擎。
要提高您的编程技能,请查看以下项目
稍微掌握了语言的窍门后,您终于可以开始研究引擎了。 2023 年,关于这个主题的信息很多:互联网资源丰富;数十个 YouTube 频道供您选择。另外,正如我所说,Unity 非常受欢迎,因此并不缺乏素材。
您可以找到引擎创建者针对任何问题的视频解决方案(可直接在 Unity Hub 上找到,您将在开始时安装),
这些是开始的三个基本步骤,从这里开始,您的道路可以继续。让我给出一个大概的轮廓。
一旦您了解了一些所选的语言和引擎,就可以尝试创建一个简单的游戏。任何游戏,甚至井字游戏。做你想做的一切——没有限制。您必须自己编写代码。 (避免从Stack Overflow复制粘贴,但这仍然是一个非常有用的资源)。主要标准是游戏必须能够运行。
接下来,为游戏提出一些新功能并尝试添加它们。例如,如果您正在创建一个平台游戏,请尝试制作一个功能,可以在按下按钮时改变关卡的重力;或者从关卡的一个部分传送到另一部分的能力。
试着记下向工作草稿中添加新内容是多么容易/困难。更改代码结构所需的数量等等。之后,研究最佳实践,了解其他开发人员如何建议组织项目和代码(OOP、SOLID、KISS),并根据您的新知识重写游戏。
然后,再次提出一个新功能并使用新知识创建它。考虑改进后的代码如何使您更容易或更困难地添加新功能,以及您可以发现多少错误。
通过几次迭代,逐渐增加项目的复杂性,并用您学到的经验教训重写它。
假设您不走捷径,您将看到您所做的决定如何干扰或帮助实现新功能。代码质量的主要标准之一是对项目进行更改的容易程度。不幸的是,对此没有明确的法律;这一切都取决于经验。
如果您不想创建简单的游戏,您可以从编写单独的机制开始。例如,您可以首先制作一辆由几个在某些表面上行驶的立方体组成的基本“汽车”,然后逐渐将其他机制添加到组合中。
之后,您可以想出一个更复杂的游戏 - 并再次经过几次迭代来改进项目。如果您得到有趣的结果,您最终可以尝试在商店中发布该游戏。
您可以尝试通过释放
我可以为您提供有关游戏发布的生活小窍门:网络/浏览器游戏。虽然这种形式似乎已经不再流行,因为现在用户主要在移动设备、PC 或游戏机上玩,但网页游戏仍然拥有足够的受众,因此您可以尝试将您的首个项目作为一个项目来启动。这也比在移动设备上将其作为本机游戏发布要容易得多。
手机游戏竞争非常激烈,如果你的游戏没有得到推广,它很可能会被忽视——而且如果没有发行商,推广一个项目是非常困难的。对于网页游戏,有专门的门户网站(例如: Armor Games、Newgrounds、WebGames )托管这些项目:在那里发布非常容易,甚至可以通过广告赚取一些钱。不要抱太大希望,但如果它发生了,这仍然是一个令人愉快的奖励。
现在,有一点警告。如今,“无代码”方法非常流行。这是在不编写代码的情况下创建项目的情况。 (也称为“鼠标点击编程”)。我的建议?最好远离这种方法。
这些无代码方法非常适合尝试游戏机制或构建简单的原型。但我们有一个不同的总体目标 - 组装一个没有代码的简单游戏并不会让你更接近成为一名开发人员。
请记住:无论阅读多少文章和观看 YouTube 指南都无法取代练习。只有通过创建多个(实际上是多个,而不仅仅是一个)项目,您才能学到一些有意义的东西。为了规划您作为游戏开发程序员的道路,这里的要点是从简单到复杂一步一步进行。
我尝试就进入游戏开发和开始游戏编程提供一些建议。选择正确的语言和引擎、坚持和毅力、收集反馈和反思——这些都非常重要。但这个过程还有另一个不可忽视的组成部分:享受乐趣。
如果你对游戏不感兴趣并且不玩游戏,那么这次冒险很可能不会有任何结果;这是一个悲伤的事实,基本上适用于任何创造性的工作。没有乐趣,就只是赚钱的例行公事。当然,无论如何,你可能会在几年后失去兴趣,但希望到那时,你已经有所成就并能够在一些相关工作之间进行选择,或者那时你已经赚到了足够的钱来做一些新的、有趣的事情。
尤其是在旅程的开始阶段,只工作不玩耍肯定会导致倦怠和失望。
因此,我的最后一条建议是:寻找让你充满激情的东西,驱使你日日夜夜地为一个项目工作的东西(当然,你不应该字面上这样做!)一旦你找到了你的驱动动力,那是什么?否则,一个典型的例行公事将变成一个有趣的、引人入胜的挑战——这肯定会加速你的职业成长!
也发布在这里。