游戏编程指南 - 提示、工具和职业

Connor Taylor

游戏程序员是将设计师的设想在我们使用的游戏引擎中实际运作的人。我在Kwalee的移动游戏编程团队工作,所以对我们来说主要是Unity。例如,如果设计师希望骰子以特定方式滚动,我将编写脚本来处理逻辑。我们还与游戏艺术家合作,确保我们的游戏不仅看起来很棒,而且在设备上实现出色的性能。

在这篇博客中,我将借鉴我在Kwalee工作五年的经验,分享成为游戏程序员的重要见解和建议。我将带你了解我们使用的一些语言、工具和原则,我的职业建议,以及初学者和高级技巧。

游戏程序员的工作是什么?

我们编写代码,帮助游戏实现。从概念到资产,程序员创造功能性和可玩性体验。我们优化游戏性能,并排除已识别的问题。

我们确保游戏感觉良好并具有高性能。为此,我们必须确保代码本身干净且可扩展,这比你想象的要难。我们使用编码标准来在所有团队中保持一致的质量——这可能是包含命名标准、格式等的文档。然而,有时事情并不总是那么简单,有时你可能需要跳出框框思考,以按时完成任务。

我们的责任还包括确保游戏在最终用户的硬件上运行良好。例如,在我们的移动游戏中,我们需要避免旧设备过热,因此我们与艺术家合作优化绘制调用次数。绘制调用是从中央处理器(CPU)发送到图形处理器(GPU)的命令,用于在屏幕上渲染对象——它告诉GPU绘制诸如纹理、网格或着色器等图形元素。我们需要尽量减少游戏中的绘制调用次数,因为太多会导致帧率下降或卡顿。有很多方法可以解决这个问题,例如将多个对象批处理为一个绘制调用或减少唯一纹理和材料的数量。对于移动设备来说,这尤其重要,因为市场上有如此多的设备,技术规格各不相同。

主要的游戏编程语言是什么?

作为日常游戏程序员,我们大部分时间都在用多种编程语言编写脚本——毕竟,我们是一类不同的软件开发者。有很多语言可以选择。有些语言看起来比其他语言简单,但一旦你学习并掌握了一种语言,你肯定可以学会其他语言——主要的挑战是入门。

以下是一些最受欢迎的游戏编程语言的介绍:

  • C# - 一种在游戏开发中广泛使用的多功能且流行的编程语言。如果你是初学者,这是最容易学习的之一。它的一个最好的特点是自动垃圾回收——因此它为你管理内存分配——对我们这些忙碌的程序员非常有用。
  • C++ - 相比之下,这是一种非托管语言,因此你必须手动分配和解除分配内存,这使得复杂度和难度大幅上升。然而,它确实提供了更高的速度、控制和性能。
  • Java - 与C#类似,Java具有自己的内存管理和垃圾回收,使得开发者在处理内存时不会过于繁琐。它广泛用于网络开发和企业应用程序,虽然它可能(可以说)不是游戏开发中的首选,但仍是创建可扩展和高效应用程序的可靠选择。
  • Swift - 这是Apple用于构建iOS和macOS游戏的本机语言。然而,这意味着它对于跨平台开发的用处较小——因为我们总是希望将我们的移动游戏发布到Android和iOS上。

如何成为游戏程序员?

成为游戏程序员有多种不同途径。我的途径相当传统——我在斯塔福德郡大学学习游戏设计和编程。起初,我认为我会进入游戏艺术领域——我一直对艺术充满热情,并且在大学时非常喜欢艺术模块,但在那里面我发现我真的很享受游戏玩法的创造。制作一个高多边形模型可能需要我几天时间,但我可以在一半时间内让一只鸭子飞起来并爆炸。原型制作让我可以快速地看到结果,直接呈现在我面前。

然而,编程游戏的美妙之处在于,即便你不是通过传统途径过来的,大多数人都可以接触到。我在大学有50岁以上的朋友——体验新事物永远不会太晚。在Kwalee,我们甚至雇用了一位主要通过YouTube视频学习的人,并制作了一款游戏只是为了乐趣。今天,对新鲜和渴望的人才有很多机会。看看新一代学生的作品集,他们已经掌握了很多东西。我们看到优秀的人才纷至沓来,现在是行业的激动人心的时刻。

一个你可能很想问的问题是——AI会影响编程作为一项职业吗?它可以极其有用,而且正在不断改进。非常适合需要解释的时候,或者你在问题中卡住的时候。你可以用它来排除错误或通过粘贴代码到最新的ChatGPT中重构(清理)你的代码。然而,当我们查看作品集时,我们想看到你完成并引以为傲的作品,AI可以使用,但请尽量不要将其作为你自身技能的替代品。

游戏程序员的一天通常是什么样的?

让我给你介绍一个基于我生活的例子。我是一名首席程序员(我称之为我的梦想工作),因此这是一个实际操作和管理其他程序员的绝佳组合!

在我的世界里,典型的一天是进来,喝杯拿铁,然后仔细检查质量保证团队的任何错误或阻碍。检查团队以看看是否有人需要我做些什么来解除他们的工作阻碍。然后音乐响起,任务列表出现。我们会通过Slack分享进度视频以获得快速反馈,同时在2-3个项目之间切换以支持团队成员。我们还花费大量时间投资于共享系统,以提高编程效率——所有这些都需要定期维护、更新和修复,以保持顺利运行。

初学者游戏编程技巧

如果你刚入门并渴望成为一名成熟的程序员,这里是我的初学者提示!

  • 在线有很多东西可以学习,YouTube上有很多示例游戏,所以你没有借口不去学习!流行的引擎是免费使用的,而且很好玩!
  • 在完全相反的极端,它可能已有30年历史,但你应该尝试阅读由所谓的四人帮作者撰写的影响力书籍《设计模式:可重用面向对象软件的元素》,这些为我们日常编程中使用的游戏模式奠定了一些基础。
  • 你可能有自己的想法,但请确保从简单开始,以便对基础充满信心。
  • 当你不从事商业项目时,你可以编写任意多的代码,因此可以创造疯狂的东西享受乐趣。
  • 建立作品集真的很重要(也是我获得工作的途径)。但非常小心,不要只是上传旧的、陈旧的大学作业,因为我们会看到很多这样的申请。即便多花一天时间重新调整和增加更多功能,也将使你脱颖而出。
  • 创建你自己的现实世界游戏也是一个聪明的想法——在Google Play上发布游戏非常便宜,所以发布一些可以在手机上向招聘者/出版商/家人/宠物展示的东西。在你全职工作之前,你甚至可能每年赚几千美元,这是一种额外的好处!或者这可能会激发你制作自己完整的游戏并与出版商合作。
  • 不要只学习编程——了解艺术、设计、QA和其他你将会互动的学科。例如,了解QA方法很有价值,因为你可能会陷入一种陷阱,即假设某事有效,但你需要像用户一样去玩,而不是做出代码的人,同时对其应有的演示方式抱有固定看法。为了对随机事情进行破坏性尝试,经验丰富的人可能会做所有可能做的、创造性方向上的疯狂行为。

高级程序员提示

这里有些提示帮助我从初级到程序员,再到高级再到负责人。

  • 不断学习是有益的,请记住,没有错误我们就无法学习!
  • 如果你对某一方面非常感兴趣——你可以变得更专业化。例如,如果你喜欢处理着色器和渲染流水线,学习更多关于如何使用图形着色器来扩展你渲染复杂视觉效果的能力以及使用渲染流水线来优化性能或创造一些很棒的效果。
  • 你可以制作一些非常酷的东西,比如一个复杂的系统,如果你的合同允许,把它上传到资产商店来展示你的高级作品。你可以发展某种程序员特定的利基,如游戏玩法程序员、服务器程序员、图形程序员或多人在线程序员。
  • 或者,也可以像我这样走管理路线,指导他人。我职业发展的策略一直是吸收新的责任。首先,我开始改善一些小事情,比如小的工作流程变化.. 然后我通过使用模板节省时间来简化创建新项目的过程。然后我爱上了指导和管理,这帮助我获得了更多自信,现在参与这边工作站、代码审核、举办研讨会和带领项目团队。

无论你是作为团队的一部分,还是作为管理者工作,给予表扬和建设性批评同样重要。在审查代码时,赞美人们是好的!

游戏编程的关键原则是什么?

有些关键主题一定要在讨论游戏编程的博客中涉及。这些是我们考虑的一些最重要的事情。

源代码控制/版本控制

正如你在游戏中有保存点,在项目开发中也有保存点。它们是项目的通用存储,意味着三到四名程序员可以同时在一个系统上工作,创建更改并将其推到服务器上。它允许我们跟踪这些更改,并在任何东西坏掉时轻松回滚。如果两个开发人员使用同一文件,该文件就会成为合并的一部分,如果存在冲突,我们可以手动解决或选择应用某个个体的更改。这种情况在使用Unity的预制件或场景时经常发生。

这些术语有时会重叠,但一般来说,源代码控制专注于代码,而版本控制包括所有项目文件、资产和文档。

当你第一次开始使用源代码控制时,可能会觉得有点可怕,可能会感觉非常压倒性,处理冲突时可能会感到无从下手。但是,版本控制的性质帮助你保存时间节点,因此如果频繁更新并使用详细的提交消息,非常有用且安全。你可以恢复到多个时间点,有多个分支等。就像开发人员的安全网,以避免发生像皮克斯Toy Story 2的版本——被意外删除,然后从他们技术总监的家用硬盘恢复,而是将其安全存储在服务器上。

面向对象编程

这是我们在Kwalee主要使用的编程类型。它使用对象来表示真实的事物或抽象的概念,旨在通过反映我们如何在现实世界中查看和交互对象的原则来组织代码库。它通过将代码组织成可重用、可扩展和更容易维护的独立类帮助维护复杂系统。

当然,有关其是否良好的争论继续存在。虽然它不是表现最好的,但效果良好。正如语言一样,各有各的优点和缺点,你应该先学习一种以开始,掌握语言和编译器(将人类代码翻译成机器代码的翻译器)的工作方式。你还可以考虑其他类型,例如函数式编程,更像是数学,逻辑编程,使用事实和规则或过程编程使用逐步数据。

编程模式

这些是非常有用的东西——可重用的解决方案可以帮助解决软件设计中遇到的常见问题。它们为你提供了一个模板来解决问题,因此你不必每次都重新发明轮子并可以遵循经过验证的解决方案。

例如,单例设计模式帮助你确保整个游戏中只有一个类的实例,例如游戏设置管理器,并为你提供全局访问点。此模式的代码意味着设置管理器类的实例始终只有一个,因此每次需要时,你不需要重新创建或重复它。

还有工厂模式可以帮助你以更有组织和灵活的方式创建对象。你可以定义方法来按输入参数生成特定类型的对象,例如角色或物品,允许你轻松创建更多相似类型的对象,而不必每次从头开始。

希望这篇博客给了你对游戏编程的一个尝试,不论你是这个领域的新手还是经验丰富的程序员!如果你是一个工作勤奋但有趣的人,你会适合我们的团队,所以了解更多关于Kwalee的职业。否则,你可以了解我们的手机游戏出版并更好地了解我们作为开发者和出版商发布的内容。

关于作者:

Connor Taylor,Kwalee的首席游戏程序员,致力于制作游戏并培养一个支持和有趣的团队。拥有5年以上经验,他创作了Jetpack Jump等热门游戏,并在Unity开发中指导他人。

相关文章

分享这篇文章: