游戏程序员是将设计师的愿景付诸实际让我们使用的游戏引擎中工作的人。我在Kwalee的移动游戏编程团队工作,所以对我们来说主要是Unity。例如,如果设计师希望骰子以特定方式滚动,我将编写处理逻辑的脚本。我们还与游戏艺术家合作,确保我们的游戏不仅看起来惊艳,还能在设备上实现出色的性能。
在这篇博客中,我将借助我在Kwalee的五年工作经验来分享关于成为游戏程序员的重要见解和建议。我会为你讲解我们使用的一些语言、工具和原则,我的职业建议,以及初学者和高级提示。
游戏程序员的职责是什么?
我们编写代码并帮助游戏成为现实。虽然游戏设计师创造概念,游戏艺术家创造资产,程序员将创建功能性和可玩的体验。我们创建并优化游戏的性能,并解决发现的任何问题。
我们确保游戏感觉很棒并且运行高效。为此,我们必须确保代码本身干净且可扩展,这比你想象的要难。我们使用编码标准来保持所有团队的一致质量——这可能包含命名标准、格式等的文档。然而,有时事情并不总是那么简单,有时你可能需要打破常规按时完成任务。
我们的责任还包括确保游戏在终端用户的硬件上顺利运行。例如,在我们的移动游戏中,我们需要避免旧设备过热,所以我们与艺术家合作优化绘制调用的数量。绘制调用是从中央处理器(CPU)到图形处理器(GPU)渲染屏幕上对象的命令——它告诉GPU绘制纹理、网格或着色器等图形元素。我们需要尽量减少游戏中的绘制调用次数,因为太多会导致帧率下降或卡顿。有很多方法可以解决这个问题,但将多个对象批处理为一个绘制调用或减少独特纹理和材质的数量都可以有所帮助。这对移动设备尤其重要,因为市场上有许多不同的设备,技术规格各不相同。
主要的游戏编程语言是什么?
作为日常游戏程序员,大部分时间都花费在使用一系列编程语言进行脚本编写上——毕竟我们是一种不同类型的软件开发人员。有很多语言可供选择。有些似乎比其他的更简单,但一旦你学会并掌握了一种,你绝对可以学习其他的——主要的挑战是踏入门槛。
以下是一些最流行的游戏编程语言简介:
- C# - 一种在游戏开发中广泛使用的多功能和流行的编程语言。如果你是初学者,它是最容易上手的语言之一。它的最佳特性之一是自动垃圾回收——因此它为你管理内存分配——对于忙碌的程序员来说非常有用。
- C++ - 相比之下,这是一个非托管语言,所以你必须手动分配和释放内存,这使得它在复杂性和难度上有一个更大的提升。然而,它确实允许更高的速度、控制和性能。
- Java- 像C#一样,Java拥有自己的内存管理和垃圾回收,使开发人员无需过多陷入细节即可处理内存。它广泛用于网络开发和企业应用程序,虽然它可能(可以说)不是游戏开发的首选,但依然是创建可扩展和高效应用的稳健选择。
- Swift - 这是苹果的本地语言,用于为iOS和macOS构建应用和游戏。然而,这意味着它对跨平台开发来说作用较小——因为我们始终致力于在Android和iOS上发布我们的移动游戏。
如何成为游戏程序员?
成为游戏程序员有多种不同的途径。我的路线相当常规——我在斯塔福德郡大学学习游戏设计和编程。起初,我以为自己会从事游戏艺术——我小时候对艺术非常热衷,而且我非常喜欢大学的艺术模块,但在那期间我发现自己非常享受创造游戏玩法。我可能需要几天时间来创建一个高多边形模型,但我可以在一半时间内让一只鸭子飞翔并爆炸。快速原型让我能迅速看到结果立刻出现在我眼前。
然而,编程游戏的美妙之处在于,即使你不是通过传统途径,也可以接触到它。我在大学有50岁以上的朋友——永远不会太晚去体验新事物。在Kwalee,我们甚至雇佣过主要通过YouTube视频学习并出于乐趣开发游戏的人。今天对于新鲜和充满热情的人才有很多机会。看着新学生的作品集,他们已经掌握了很多东西。我们看到出色的人才涌现,行业正处于激动人心的时刻。
你可能很想问一个问题——AI会对编程这份职业产生影响吗?它非常有用,且在不断进步。完美适用于需要解释或卡在问题中的人。你可以用它来排查错误,或者通过粘贴到最新的ChatGPT中重构(‘清理’)你的代码。然而,当我们查看作品集时,我们希望看到你所做并自豪的工作,AI可以使用,但不要将其作为自己技能的替代品。
游戏程序员的一天是什么样的?
让我以我的生活为例。我是一名首席程序员(我称之为我的梦想工作),所以这是一个很棒的动手与管理其他程序员的混合!
我世界中的典型一天是进办公室,喝一杯拿铁,然后仔细检查QA团队的任何错误或障碍。检查团队是否有人需要我做些什么来解除他们的工作障碍。然后音乐响起,任务清单列好。我们将在Slack上通过共享进度视频快速获取反馈,同时在2-3个项目之间穿梭以支持团队成员。我们还花很多时间投资于共享系统以提高编程效率——所有这些都需要定期维护、更新和修复以确保顺利进行。
初学者游戏编程提示
如果你刚开始并希望成为一名完全成熟的程序员,这里是我的初学者提示!
- 网上有很多东西要学,包括YouTube,还有很多例子游戏让你没有理由不去学习!流行的引擎都是免费的并且使用起来很有趣!
- 在完全相反的方向上,这本可能已有30年历史,但你应该尝试阅读由所谓“四人帮”作者撰写的具有影响力的书籍《设计模式:可重用面向对象软件的元素》,其中介绍了一些我们在编程中每天使用的游戏模式的基础。
- 你可能有自己的想法,但请确保从简单开始,以便你掌握基础知识。
- 当你不受商业项目的限制时,你可以编写尽可能多的代码,因此尽量享受创造疯狂事物的乐趣。
- 创建一个作品集真的很关键(这就是我找到工作的方式)。但要非常小心,不要只上传那些陈旧的标准大学作品,因为我们会看到很多这样的申请。即便是花一天时间重新设计并添加更多功能也会帮助你脱颖而出。
- 创建自己的现实世界游戏也是一个聪明的主意——在Google Play上发布游戏的成本非常低,因此你可以发布某些内容,从而可以向招聘人员/发布者/家人/宠物展示你的手机游戏。直到你获得独家全职职位合同,你可能每年能赚几千美元,那是一种奖励!或者它可能会让你动心,促使你制作自己的完整游戏并与发行商合作。
- 不仅要学习编程,还要学习与你合作的其他学科,如艺术、设计、质量保证等。无论是由于有相似的思维过程还是因为你可能低估了质量保证方法的重要性,了解质量保证方法会很有价值。因为你可能会陷入假设某个东西有效的陷阱,但你需要从用户而非编写代码的开发人员的角度来游戏体验,为自己确定它“应该如何玩”。尝试做一些用户可能做的随机事情,打破常规,摁下随机按钮以及其他奇怪的行为。
高级程序员提示
以下是一些帮助我从初级到程序员再到高级到首席的一些秘诀。
- 你总是可以从更多学习中受益,并记住没有错误我们就不能学习!
- 如果你对某些事物非常热情——你可以成为更专业化的。例如,如果你喜欢处理着色器和渲染管线,学会更多有关如何使用图形着色器来扩展你的能力,以渲染复杂的视觉效果并使用渲染管线来优化性能或创造一些酷炫的效果。
- 你可以创建一些非常酷的东西,比如一个复杂的系统,将其上传到资产商店来展示它(如果你的合同允许)并炫耀你的高级作品。你可以发展成为一种特定类型的程序员,例如游戏玩法程序员、服务器程序员、图形程序员或多人游戏程序员。
- 或者,你可以像我一样走管理路线,指导他人。我职业发展的策略是接受新职责。首先,我开始改善较小的事情,即小的工作流程改变。然后,我通过使用模板在创建新项目时节省时间来使过程更简单。然后我得到了指导和管理的经验,这帮助我获得了更多的信心,现在参与同行评审、代码评审、举办研讨会并领导项目团队。
无论是作为团队的一员还是作为经理,给予赞扬和给予建设性批评同样重要。在审查代码时,激励人们是件好事!
游戏编程的关键原则是什么?
在涵盖游戏编程的博客中有一些必须要介绍的关键主题。这些是我们考虑的一些最重要的事情。
源代码管理/版本控制
就像游戏中有保存点一样,项目开发中也有保存点。它们作为项目的一般存储空间,并意味着三到四个程序员可以同时在一个系统上工作,进行更改并将其推送到服务器。我们可以跟踪这些更改,并在任何问题发生时轻松返回。如果两个开发人员在同一个文件上工作,该文件将成为合并的一部分,如果有冲突,我们可以手动解决或挑选个人的更改来应用。这将经常发生在使用Unity中的预制件或场景时。
这些术语有时会重叠,但通常,源代码管理侧重于代码,而版本控制包括所有项目文件、资产和文档。
当你第一次开始使用源代码管理时,可能会感到有些害怕,且看似非常复杂,并且当涉及到冲突时你可能会不知所措。但版本控制的本质帮助你保存时间点,所以如果你频繁更新并使用详细的提交信息,它非常有用且安全。你可以返回多个点,有多个分支等。将其视为开发人员的安全网,因此我们可以避免像Pixar的玩具总动员2一样被意外删除,然后从他们技术总监家中的硬盘中恢复,而是将所有东西安全地保存到服务器上。
面向对象编程
这是我们在Kwalee主要使用的编程方式。它使用对象来表示实际的事物或抽象概念,旨在使用与我们在现实世界中看到和与对象互动的原则来组织代码库。它通过将代码组织成独立的类来减少系统的复杂性,这些类可以更轻松地重用、扩展和维护。
当然,关于它的好与坏会有争议。虽然它不是性能最高的,但效果不错。正如语言一样,每种语言都有其优缺点,你可以从学会一种开始,进而掌握语言和编译器(将人类代码翻译成机器代码的工具)的工作原理。你还可以考虑其他类型,例如将其视为数学的函数式编程,使用事实和规则的逻辑编程,或者使用逐步数据的程序化编程。
编程模式
这些是非常有用的东西——可以帮助解决你在软件设计中面临的常见问题的可重用解决方案。它们为你提供了一个修复问题的模板,让你无需每次重新发明轮子就能够遵循经过验证的解决方案。
例如,单例设计模式帮助你确保整个游戏中只有一个类的实例,例如游戏设置管理器,并提供一个全局访问点。此模式的代码意味着SettingsManager类只有一个实例,因此你无需每次需要时重新创建或复制它。
还有工厂模式,它可以帮助你以更有组织和灵活的方式创建对象。你可以定义用于生成特定类型对象的方法,例如基于输入参数的角色或物品,允许你轻松创建更多的相似类型对象,而不必每次都从头开始。
希望这篇博客已让你对游戏编程有了一些了解,无论你是这个领域的新手还是经验丰富的程序员!如果你是一个努力工作并乐于玩乐的人,你会很适合我们的团队,所以了解更多关于Kwalee的职业。否则,你可以了解我们的手机游戏或发布,并更深入了解我们作为开发者和发布者发布的内容。








