近些年来,游戏研发工具已经变得越来越高级,越来越简单,但对于很多开发者来说,想要做多人游戏,仍面临不小的挑战。
上回GameLook介绍了Hadean与EVE实现1.4万人对战案例后,曾提到了另一家更早拥有类似技术的公司,那就是2017年曾获软银5亿美元巨额投资、2018年再获网易5000万美元投资的英国伦敦“超级独角兽企业”Improbable,其让小团队做多人游戏有了更简单、更成熟的解决方案,那就是该公司的SpatialOS,且该产品已经商业化,且已有中国分公司。
在2019年的GDC大会上,Improbable公司创始人Herman Narula、共同创始人Rob Whitehead和工程师Jessica Flak现场展示了在20分钟内通过Unity引擎研发一个200人FPS游戏的过程,且根据该公司介绍,1万人在线游戏对战也可以实现,以下是Gamelook整理的演讲内容:
有英文基础的程序员可以观看视频(约1小时)
我叫Herman Narula,是Improbable公司的创始人兼CEO,五年前成立于英国伦敦的一个酒吧里,我们的目标是让开发者们用更简单的方式创造多人在线游戏。简而言之,我们打造的SpatialOS就是一个多人游戏研发解决方案,它是一个平台,为你解决基础设施、网络方面的问题,为主流引擎都做了插件,包括Unity、虚幻引擎和Crytek,甚至是很多定制化引擎都可以用。
今天主要是通过实际案例来展示我们的技术可以实现什么效果,同时也介绍一下我们的公司。随着网易的投资,我们已经可以支持中国开发者,还在中国上海成立了办公室。
在基础设施方面,我们还在和更多的供应商合作,比如跟谷歌也建立了合作关系,但我们现在也在支持其他的云服务,所以当你用SpatialOS的时候,可以在各种云服务之间自由选择。
还有一个比较大的消息是,我们还在加拿大成立了内部研发工作室,由前BioWare总经理Aaryn Flynn领衔,团队成员曾参与过《龙腾世纪》、《质量效应》、《圣歌》、《孤岛惊魂5》和《WipeOut》等大作,目的是打造Improbable首个内部游戏。
过去一年里,开发者用我们的平台创作了非常出色的游戏,比如千人战术竞技游戏《Mavericks: Proving Grounds》、Josh Holmes和他的团队研发的《Scavengers》等产品都有出色的效果。
我们发现,很多人并不是为了创造更大的世界活动,而是希望有更便捷的方式创造多人游戏体验,有足够的空间做创新。接下来我把舞台交给Rob,他将从技术方面介绍SpatialOS。
Rob Whitehead(共同创始人,首席产品官):首先,我们会介绍SpatialOS,你可以用这个技术做什么;第二部分,谈谈2018年在技术方面发生了什么变化,有哪些进展以及未来会有什么变化;最后一部分,我们会在台上现场展示一个demo,它是用本地GDK研发的,你可以看到真是的API使用,包括一些概念上的东西和引擎功能使用。
可研发多人游戏的云平台:SpatialOS的工作原理
那么,什么是SpatialOS?如Herman所说,它是一个可以打造任意多人游戏的云平台,能够为你提供研发、Hosting以及很多在线多人游戏的解决方案。
先说Hosting功能,你不需要把游戏运行在专门的服务器上,只需要在我们的服务器运行即可,当游戏运行的时候,我们负责这些部署的运行时间;第二个功能就是在线服务,现代在线游戏并不只是运行游戏系统,它还包括在线匹配、系统玩家数据以及完美的实时体验,其中的任何一个功能出现问题,你都需要很长时间才能搞定,这些我们都会参与其中;工具是非常重要的一个因素,你需要有内部工具来探索这个平台的能力,我们也会提供大量的工具,我们的目标是给你的研发提供方便,而不是给你一个很大的箱子。最后一个功能是独特的网络堆栈,它可以让你尝试很多疯狂的想法。
这张图的左侧展示了大多数游戏的服务器架构模式,无论是战术竞技还是MMO,目前大多数游戏都会在服务器端有一个专门的服务器,运行你所使用的游戏引擎版本,然后连接客户端。当你做比较小的高保真体验的时候,它是很好的解决方案,比如32人、64人,当做100人战术竞技的时候,可能就要牺牲一些性能。
但是,如果你想做的更多,比如加入持续出现的AI,或者增加玩家人数,那就会碰到单个服务器的天花板。所以SpatialOS的解决方案是,你仍然有服务器和客户端,但并不是单个服务器,而是有很多个,这些服务器可以实时协作支持更大的游戏世界。
那么,这是如何实现的呢?
这张图是从结构视角展示SpatialOS的运行原理,你仍然有客户端和服务器,但它们都集成到了我们的SDK里,给他们增加了Networking的能力。客户端像正常情况下一样连接服务器,技术上来说,它是与我们的SpatialOS Runtime链接,这是一个分发系统,而不是专门的服务器,因此可以处理更多的客户端请求。底部这些服务器直接和runtime链接,所以多个引擎的服务器都可以同时协作,然后在客户端,你可以接收更多的信息,而不再只是单个服务器承载所有的压力。
SpatialOS是一个很强大的研发工具,但你并不一定要使用所有的功能,而是看你要创造什么样的游戏,就像是给你一个大箱子,想要探索多少,完全取决于开发者,有时候你可能没有预算,只想加入AI角色。
SpatialOS可支持所有类型游戏
所以从规模上来说,SpatialOS可以支持10到10000人,你可以让1000人同时互动、在匹配之前相互交易,这些匹配可能是传统的100人战术竞技,也可以是4人PVE,这都没有问题;游戏世界模拟层面,你可以做高保真大世界,也可以做传统的PvP射击;持续性指的是游戏世界的状态可以持续数月甚至数年,当然你也可以做传统的游戏世界,开发者的选择自由度很高。
以上是对SpatialOS技术的概览,接下来我会介绍一些比较酷的事情,这也是我最喜欢的。
SpatialOS能做什么:6000人吃鸡、2万人MMO
在2017年第一个版本的时候,我们的Runtime可以处理1000人的MMO,当时的每秒Operations达到25万,到2019年3月,我们已经可以支持每秒600万Operations,这还只是个开始,我们后续会继续提高。
这意味着什么,举例来说,你可以做一个支持最高6000名玩家的高保真战斗玩法,或者,如果你降低保真度,则可以支持更大的用户量,比如2万人的MMORPG场景。
在做了一个大世界之后,我们还需要让开发者有工具了解这个世界里实时发生了什么,比如这个工具可以让你追踪所有玩家、所有AI的位置,用视觉化的方式看到这个游戏世界里发生的所有事情。
SpatialOS另一个有趣的功能叫做Query-based interest,当你有一款容纳数千人的游戏时,如何知道所有人看到的东西是很复杂的任务,因为每个人都不能看到所有东西,这个工具就是我们的解决方案。
通常来说,在一款MMO游戏里,当角色在游戏里行走的时候,就会有一个泡泡式的范围随着角色移动,在特定距离内,玩家能够看到游戏世界里的东西,但在这个距离之外,你是看不到的。这个工具可以让你自己决定玩家看到的游戏世界是什么样的,让他们看多远、保真度是多少,比如你站在山上,可以拿望远镜看到山下的数,甚至是树上的苹果,这些都是可以实现的。
另外一个值得探索的是在线服务,当玩家进入游戏之后,你需要考虑的事情太多了,比如匹配、持续的玩家数据、物品栏等等,但你并不一定有足够的设施支持这些服务,可能只能做到其中一些,我们觉得这些是开发者接下来需要的功能。
在2019年,我们要做的有两件事,首先,给开发者们一个能够打造这些服务的环境,让开发者可以流畅地支持各种在线服务;此外,我们希望提供源代码让你更方便地做这些功能,比如匹配、玩家档案、player auth、数据库集成、即时管理等等。
GDK for Unity指的是为Unity引擎做的游戏研发Kit。
在性能方面,SpatialOS是一个非常不错的技术,但我们更多的是思考如何与Unity引擎更好地结合,如何帮助开发者解决做多人游戏过程中的研发挑战。我们做的并不只是做了一个Networking 堆栈,而是做了一个完整的工具集,支持现代多人游戏研发的整个过程。
通过这个GDK,你可以得到高性能的游戏,做快速的迭代,最后一个就是即开即用的玩法调整。
从结构来说,这张图可以解释我们的GDK工作原理:
底部是我们的GDK Core,直接集成在Unity里,再往上是功能模块,针对很多难以决绝的功能,我们都做了开源内容,你可以拿来即用,比如角色移动、同步转换、可射击的武器、角色健康值、玩家生命周期等,你可以通过FPS Starter Project功能快速打造自己的游戏。
接下来让我们的工程师Jessica Flak展示完整的GDK使用流程:
20分钟用Unity做一款200人FPS
Jessica Flak:在开始demo展示之前,我们先来了解SpatialOS的一些概念:
首先是worker,它指的是客户端或者服务器上的实例,可以是在服务器或者客户端用任何逻辑执行的任何事物。
这些workers与deployment连接,后者指的是你的game instance,任何需要在客户端和服务器端同步的物体都会存储在deployment里。
存储在deployment里的物体就叫做Entity;存储这些物体数据的叫做Component;最后,Event/Command指的是workers可以发送和接收的信息。
接下来看我们在Unity里的FPS Starter Project,它的源码可以在GitHub下载。我们的GDK可以支持多种游戏研发需要的功能和工具,你可以自己决定使用哪些功能,比如Core是必要的接收和发送数据功能、GameObject Creation模块可以让你创作游戏内的物体,所以要使用哪些,取决于你要做什么样的游戏。
我们还提供了SpatialOS工具栏,你可以在Unity里直接创建服务器,甚至还可以直接运行。
在一开始,我们先来看Unity里的worker结构,你有很多个场景,每个场景都是由worker组成的,比如客户端场景、游戏逻辑场景等等,这些场景实际上包含多个worker,所以我们为游戏里加入物体的方式就是添加场景。
如此前所说,我们还有Inspector功能,他能够让你实时看到游戏内的状况,比如我们现在游戏里已经有了两名玩家,右侧可以看到用了哪些workers。
我们回过头来连接游戏,你可以看到另外一个玩家已经朝着我的角色射击了。
Rob Whitehead:当你连接客户端的时候,同时也连接了服务器,所以你能够在编辑器里这样做,可以很容易做debugging。
Jessica:我们先来看看在SpatialOS里,数据是如何展现的,如何确定workers可以相互交流。为此,我们做了Schema,你可以定义想要使用的component类型,比如健康值component,我们已经加入了玩家Entity里,每个健康值component都有两个fields:一是目前的健康值以及被击中之后的健康值变化和获得的健康值,另外一个是最大健康值。
我们还加入了command Events,这样其他workers可以知道健康值变化之后的信息。这些schema是完全存在于Unity之外的,所以也可以在虚幻引擎里使用,哪怕不使用任何引擎,都可以被GDK兼容。
SpatialOS工具栏还提供了代码生成功能,你可以Cshell Project里生成与健康值schema相关的所有东西。
比如我们的HealthBarHandler,它包含多个SetHealthBar,显示效果取决于剩余的健康值,目前的状态下是没有任何变化的。
为了确保我们可以从SpatialOS收到数据,我们将加入一个叫做Require的attribute,这里加入HealthComponentReader,我们生成两种类型的Objects,分为Reader和Writer,Reader允许读取HealthComponent数据以及变化之后的数据,Writer则可以让你在服务器修改数据,比如被击中或者其他情况发生健康值变化的时候。
我们再回到Unity Project,这时候健康值的变化就可以视觉化显示了。
这个demo里我们还没有做其他的东西,你可以根据需要增加任何想要的功能,由于可以同时连接服务器和客户端,所以多人游戏做起来就像单机游戏那么简单。
这是我们在Local研发的做法,未来还会增加云功能,这样你的工作室成员就可以远程加入游戏并且测试,或者你还可以让亲朋好友来测试,在用户量方面,我们将最高支持2000人(同时测试),任何人只要下载就可以自己去做。
在编辑器界面,通过SpatialOS工具栏,build for cloud,然后选择all workers就可以实现。接下来打开deployment launcher,它可以把所有东西上传到云端,确保一切运行正常。
由于已经调好了数值,我们回到Overview界面,我们可以看到游戏里的状态,目前连接了200个Unity客户端,你还可以看到其他想要用到的高级参数。
现在我们来看logs页面,它包含了SpatialOS或者其他workers发送给SpatialOS的所有log,因此你可以非常便捷的做debug。
我想要展示的第二个页面是Metrics,它可以让你了解更多deployment信息,比如目前没有workers出错,很多wokers处于连接状态,以及不同workers的延迟状态,右上角的dashborads可以让你看到更多数据,执行更多命令。
最后要说的是World页面,你可以看到很多玩家实时在游戏里的状态。
这个页面的Launch按钮可以直接进入游戏去观察发生了什么,分享按钮可以发送给你想要邀请测试的人。
Rob whitehead:对于这个demo,我们被问到最多的问题就是手游,我们在PC和主机上演示过游戏,但高保真游戏到手游设备需要适应,我们的技术已经可以实现对iOS和安卓的支持,而且支持3G、4G和wifi网络,我们来展示用手机玩demo效果:
你们可以看到,SpatialOS已经可以支持跨平台游戏。
总结
Herman:在结束之前,我想快速谈一些其他的方面,比如商务,了解技术方面的东西之后,可能很多人关心的是我们如何收费,这里我可以简单的说下商业模式,我们只是另一个基础设施供应商,所以合作方式有很多种,目前是我们来选择合作方式,但未来你们也可以根据不同的情况做出改变,这种灵活性的合作优势在于,它可以把开发者成本降到最低,尤其是独立游戏开发者。
左至右:Rob Whitehead、Jessica Flak和Herman Narula
另外一个我想说的是,为什么与我们合作?过去五年来,我们所做的不只是服务,而是专注于基础设施的行业合作者,比如我们的开源工作,从我们发布的调查报告,到开源工具,我们的开源设施甚至被谷歌和Amazon使用。
还有就是,SpatialOS的优势在于,它专注于API,使用门槛低,你可以做任何想做的创新,甚至可以把用它做出来的项目卖掉。我们不是一个只向你展示黑科技的公司,而是真正希望与你们一同协作的合伙人,你们可以通过社区、Discord与我们联系,也可以到伦敦或者上海见面聊,谢谢大家。