游戏开发:改进Onrush中的客户端服务器开发工作流程

游戏开发:改进Onrush中的客户端服务器开发工作流程

像许多工作室一样,我们的抱负远远超过了我们的能力。 Onrush的核心团队大约有50人,其中代码和艺术大约相等,另外还有一个小型设计团队。 因此,当我们坐下来计划游戏的开发流程如何在我们的开发团队中运作时,我们必须确保开发人员和技术的最高效率来实现我们的目标。 允许团队迭代并围绕想法发展始终是保证高质量的关键。

Onrush从一开始就被设计为在线竞争性游戏,因此我们需要一种服务器架构来支持游戏的所有在线方面。 将这种工作量添加到我们的游戏开发中意味着我们团队的工作量增加了两倍,需要在两个不同的问题域中开发两个单独的软件,并需要两种不同的技能。

在规划开发工作负载时,根据游戏代码和服务器代码的两个问题域(每个域都有各自的可交付成果)来定义团队可能很容易。 这符合基于文件,可执行文件和操作系统的技术知识的观点。 但是,这着眼于播放器的错误交付。 我们确实是在为玩家提供一种体验,而游戏和服务器的结合就是我们提供这些体验的方式。 游戏中每时每刻的体验通常涉及幕后玩家,游戏与服务器(以及其他联网的玩家)之间的多次交互。

不幸的是,将任务分散到多个单独的团队中将不可避免地导致任务切换,停机时间,阻塞,迭代丢失和机会成本高昂。 通过选择基于玩家体验的任务,我们可以垂直了解整个技术堆栈,从UI到游戏代码再到服务器代码。

对于Onrush,我们希望确保将玩家体验分解为可以由一个人端对端拥有的任务。 对我们来说,这意味着没有独立的服务器团队。 相反,我们需要的是一个可扩展的服务器平台,可以由游戏程序员轻松地对其进行自定义和管理。 在内部构建这种服务器平台不在项目范围内,因为这需要我们团队不断进行开发和维护。 因此,我们开始寻找已经可用的解决方案。

快速原型制作和迭代

我们想要一个现成的服务器平台,该平台使游戏团队可以使用各种可用的灵活服务器功能,这些功能可以直接使用。 然后,游戏团队有责任将游戏功能装配到可用的服务器功能上,以达到固定的目标。 通过使用GameSparks,游戏团队能够在一个(两周)冲刺中原型化和迭代游戏服务器功能。 这样可以节省大量时间和资源,否则将需要从头开始为每个原型实现自定义游戏服务器功能。 这给了我们更快的迭代速度,使我们能够尝试更多的想法并获得更高的质量。

单个开发者拥有客户端和服务器功能

GameSparks允许将自定义代码*添加到平台上几乎所有功能。 这使游戏团队可以实现自定义服务器行为,并且是高效工作流程的关键部分。

Onrush游戏代码是作为可扩展的网络平台构建的,但是我们没有“网络程序员”作为特定的工作角色。 团队中的每个人都充当其所实现功能的网络程序员。 下一个合乎逻辑的步骤是使团队成员也要成为他们拥有的功能的服务器程序员。 通过允许功能由单个程序员进行原型设计和迭代而不会中断,我们避免了浪费时间,而这些时间本来可以花在在开发人员或Scrum团队之间传递任务,以及诊断和调试团队之间的问题。 这再次使我们缩短了迭代时间,并使我们的团队对整个过程有所了解。

每个任务工作流分支

Onrush另一个重要的工作流程决定是切换到支持每个任务分支的SCM **。 在2015年至2016年的全面调查中,该团队改用了PlasticSCM。 我们需要我们的代码团队能够进行试验和快速迭代,以找到Onrush将成为的游戏。 在我们之前的项目中,我们使用主线开发以及Dev,QA,Scratch等少数几个共享服务器环境。 这通常会导致WIP代码与当前的Dev服务器环境不兼容,从而迫使主线进行中任务更新,并导致开发时间的浪费。

除非我们从共享服务器环境中进行类似的转移,否则将无法按任务将模式转移到分支 。 将服务器配置克隆到新环境中,只需在GameSparks中按几下简单的按钮,即可完成30秒的任务。 这项容易被忽略的功能使团队能够根据需要为每个分支和任务构建一个带有一次性游戏服务器的“每个任务分支”工作流。

这不仅帮助我们避免了服务器兼容性问题,而且还将所有客户端和服务器代码以及配置封装在任务分支中。 这大大简化了我们的日常开发,节省了很多时间和精力。

建立健全的生产和部署流程的能力

随着大量一次性服务器配置的创建,将服务器代码和配置集成到主线中的简单而强大的管道至关重要。 GameSparks SCM集成和Web服务端点使我们能够使用SCM合并和解决服务器配置和代码更改。 这允许将相同的熟悉过程用于游戏客户端更改和服务器更改。

一旦所有更改都进入主线,我们的CI ***将运行构建工作,以将最新的更改推送到Scratch然后是Dev环境。 从这里开始,将在游戏构建过程中生成服务器快照。 这些快照可以进行测试,并与匹配的游戏客户端版本一起传播到其他服务器Dev,QA,CERT,Prod。

通过CI自动化服务器配置部署的灵活性使我们能够将环境控制权交给不同的团队,从而提供自助式服务器配置和部署。 例如,QA可以使用测试周期中当前版本的配置更新QA环境,通常需要30秒钟左右。 CI充当用户角色验证者,用户界面和部署记录保持者。

通过允许Onrush团队构建高效的工作流程,避免多个游戏和服务器团队,支持多个环境并提供已知功能的固定目标,GameSparks已将数百个小时的损失时间和机会成本转化为有意义的迭代和更高的质量。最终产品。

结束

* Javascript。 Javascript是一种功能强大的语言,支持许多功能语言功能。 Javascript的致命弱点是它的动态类型和缺乏编译时检查。 这给大型项目带来了可伸缩性问题,因为必须调用执行流和动态数据的每个排列来测试正确的行为。 我建议您查看Andreas Fredriksson在Insomniac的Web工具上的出色GDC演讲://www.gdcvault.com/play/1024465/Insomniac-s-Web-Tools-A

** PlasticSCM。 https://www.plasticscm.com/

詹金斯。 https://jenkins.io/