一、引言
现在“云游戏”已经不是什么新鲜概念了,这篇博文也无意在此炒作这个概念,本人是做技术出身的制作人,在此仅想和总结、分享一下在这方面的体会,同时考虑到这篇博文是首发在CSDN上因此在内容上会更偏向技术本身。后续我会继续分享一些游戏制作想法,主要是针对国内游戏的现状谈谈如何提升游戏设计品质和一款游戏的核心竞争力的问题,当然这些内容和技术本身就没有多少联系了。
因为个人认识高度有限,文中如有不妥之处望各位多多包涵。诚心向各位学习。
二、《城市大富翁》的“云”
在开始话题之前,先浏览一款国内的已经开始测试的采用“云游戏”概念设计的网络游戏《城市大富翁》,官方网站:www.dfw173.com ,目前游戏还在进行测试,很多功能都尚未开放。
2008年我和合伙人在杭州创建了游戏开发公司,公司的第一个项目就是《城市大富翁》,一款2D画面的休闲游戏,游戏以经典的强手棋游戏规则作为核心玩法,对传统玩法的规则进行了扩展和创新,加入了包括“地产争夺”,“地产塔防”,“吃豆子”,“僵尸竞技”等新的玩法,同时加入了财团系统、商会系统、地产系统、股票系统、人物换装系统、建筑换装系统等特色系统。因为项目确定采用2D画面,因此我专门为这款游戏开发了一款名为 KylinGE 的全特性2D游戏客户端引擎,后由公司的客户端主程经过几次改进,成为现在项目里使用的 Cactus 游戏引擎。立项之初考虑采用的“云”结构其实是非常简单的云结构,即服务器云结构,这样既没有反外挂程序的压力,也可以做到 7x24 不间断服务。游戏的所有逻辑运算都在“云端”完成,客户端仅负责显示游戏动画,传输玩家的操作数据。这样客户端没有任何和游戏相关的逻辑结构,实质是一个“操作交互器”,它不关心逻辑提供者是谁,只要告知正确的服务指向地,并提供它需要的服务,客户端上就可以进行游戏。
你可能会说那不就类似 Web Game 的结构了,Web Game 不一定是“云”,这里不对该问题进行探讨,如果你感兴趣可以给我发邮件我们一起探讨。
回到项目上来,在项目里我除了担任制作人职责之外,还负责了云端开发,云端的运行平台是 Ubuntu,我完成了从系统架构直至云链的设计以及大量的编码工作,其中带给我的体验除了“新鲜”外,还有很多反思,我将在下面一一道来。同时出于对《城市大富翁》项目的保密,我下面涉及的内容都不涉及该款游戏产品本身的内容和任何技术细节,仅是我个人的一些思考和总结。
三、“云”很美丽,但雾里看花
“云”为什么很美?我相信每个人都有自己的答案,而在我看来她之所以美其实就是因为解放了用户,对用户的解放是“云”最美的地方。不能解放用户的“云”其实不美。你可能会问“你对解放的定义是什么?”,其实解放就是一种无拘无束,对游戏玩家而言就是不需要一定要做到电脑旁边才能进行游戏,不需要下载客户端,不需要花费数分钟等待数据更新……,玩家可以自由选择他认为最合适的方式开始游戏,不受限制的开始游戏体验。而《城市大富翁》这样的云游戏解决的问题是可以让玩家多一种选择,在下载客户端和通过网页形式二选一开始游戏。我前面已经说了这样的云其实只是服务器云,从形式上看很像 Web Game (这里说的是“从形式”上看很像)。这不免引出另一个问题,就是 Web Game 的云问题。Web 先天具备云的条件,Web 为云实现提供了很好的平台,因为浏览器(无关具体的厂商)是史上装机量最大的软件,包括家用游戏机上都有安装,很可能有一天你会发现原来家里的机顶盒里就是一个浏览器,看的电视节目都是在浏览器里的。OK,浏览器这个话题在此打住。Web Game 涉及的云游戏问题不是本文要讨论的问题,但是可以肯定 Web 是个很好的平台,也是目前的最佳选择,这里明确这点即可。
仅仅有了一朵朵“云”还不能成为“云游戏”,我们需要云链将云链接起来,让他们协作起来,为其他云解决问题,同时把自己不能解决的问题交给其他云。而具体的“云”的架构各个厂商都不一样,差异巨大。我在刚设计时更多是考虑了效率和开发风险。游戏逻辑都由服务器运算这样对服务器的负载能力是个很大的考验,而且需要在响应速度和吞吐量之间做出平衡,在开发人员基本都是新手的情况下我既要开发也要管理,为了降低风险,在设计上放弃了很多风险比较高的设计,将很多结构简化了。比如《城市大富翁》云链只有一条,而且云链端点延展到了游戏的各个逻辑层,穿透深的好处就是让逻辑结构看起来更连贯,并且中间少了转链的步骤也提高了效率,但是缺点就是基本上不能扩展,通用性差,如果端点可以分离,将云链设计为双链、甚至是可配置的多链更好,这样更容易适应开发需求和运行环境。如图1所示,上图就是单链,大致的结构如图中所示,实际中的层次结构较图中复杂。
图1
最终被放弃的设计还有云发现和云互备等等,《城市大富翁》的云因为没有发现功能,也不能进行互备,这样加入云和移除云时不得不把同组的服务器都进行重启。放弃很多功能的同时使得云链协议就变得很整洁,基本上只有游戏逻辑在上面跑,最后为了维护各个服务器,还开发了一个管理服务器,对所有云进行在线的运行时维护,当然如前所述,云链结构决定了管理服务器同样没有通用性,同时管理服务器的出现了打破了云之间的平等原则。但在我看来,在现在的技术背景下要实现理想的云是不现实的。另外,我们在刚开发的时候没有基于云链开发,而是直接对各个系统层的开发,比如实体层就开发实体层,脚本层就开发脚本层,命令层就开发命令层,结果发现这样效率不高,后来改为基于云链开发,把任务分解到链上,而不是分解到系统层次上,开发效率提高了,同时BUG数量也相对减少很多。如果云链是多条那么效率还能提高。
“云游戏”的另一个致命问题就是响应速度,因为所有逻辑都要在两个云端之间传输,不仅频率高而且数据量较大,同时游戏里有些处理对响应时间非常敏感,比如人物的移动,就需要很快的响应时间,否则就会出现“卡”住的现象,而且响应速度不仅取决于服务器的处理速度还受限于具体的网络环境,所以只有同时克服了这两个问题才能保证一个可以接受的响应时间。克服服务器自身响应速度有很多方法,比如优化代码、优化内存管理、使用内存池、使用短时间片对象管理、压缩数据等等,在这些最基本的工作做完之后还需要对某些逻辑做预测,对可能的结果做出预测,尤其是那些可能需要花费上百毫秒才能处理完的事情,预测是非常重要的,当然了代价就是需要足够大的内存。再者,因为游戏的所有逻辑脚本都运行在了服务器上所以脚本层的设计也需要做成调整,尽可能的缩短脚本的运行时间。克服网络环境造成的响应速度慢问题最有效的办法就是“就近原则”,路由上尽可能减少几跳,把服务器部署到物理距离上离目标玩家近可能近的地方。所以如果你不是浙江电信的网络,在体验《城市大富翁》可能就会存在这样的问题,《城市大富翁》测试服务器使用的入口带宽实在有限,服务器是托管的,我只能抱歉了(有时候有些事情不是我能解决的,这是创业中的问题,这是题外话了)。
“云游戏”面临的问题还有很多,当你亲身去做的时候你会发现“云”很美,但是总感觉是雾里看花。
四、回归游戏本质
从游戏的分发方式看《城市大富翁》属于客户端游戏,Web 版本属于基于 Flash 的 Web Game 。玩家不知道你这个游戏用了什么“云”,也没这个必。玩家需要的是好玩、有趣的的游戏,打开电脑、拿出手机就直接参与的游戏。只有这样才能解放玩家。游戏的可玩性和趣味性探讨已经超出了本文的讨论范畴了。
当玩家在游戏里“被绑着手脚跳舞”时,他们希望在游戏里解放他们的双手,无限制地探索虚拟世界。同时,在获得这个虚拟世界时,他们同样希望解放他们。看到少则几百 MB ,多则数 GB 容量的游戏,我心里总会一阵凉。当辛苦地把数 GB 的游戏拖到硬盘上,安装之后,进行游戏时发现实际在玩的数据量只是其中的几百 MB 。大量带宽也被这样无形地浪费了。
游戏应该回归本质,让玩家通过很低的门槛参与游戏,同时不断推陈出新,丰富内容,不断创新和完善玩法,以最直接和便捷的方式达到这个目的,这就是 First Realms Plan 的目标。这个计划的目标就是将 2D/3D 游戏通过 Web 直接提供给玩家,建立在 Archer 云游戏平台基础上,使其具备对未来游戏的竞争力,尤其是社区 3D 游戏方面的优势更加突出。计划开始之初我仅仅是针对独立游戏市场,但是国内独立游戏开发状况并不是很好,能坚持做完的寥寥无几,很难培养出平台的稳定性。今年我计划将该计划在商业游戏领域进行推广,并进行了开源,现在这个计划已经开始筹备了,计划已经吸引了很多游戏厂商的关注,目前已经有一款国产 3D 武侠大作《赤墨》和我达成了平台合作。而且该计划本身也将推出自己的独立游戏产品。由于计划还在筹备阶段,在此不便透露过多信息,有兴趣的朋友可以关注我的 BLOG ,附上图2,图中展示了该计划的特征之一,多话就不说了。
图2
计划的官方网站是 www.firstrealms.com ,我们希望能吸引更多的人加入这个计划:Real PC Gaming in Your Browser。
文章的题目是“云游戏”,最后提一下 Archer 里的“细胞云”技术,因为这项技术我正在申请技术专利的原因,这里不便公开细节,而且也需要经过实践进一步完善。该云针对的应用环境主要是需要为用户提供 7x24 不间断服务,对响应时间敏感,需要传输大量数据的应用,由于每个云端被抽象,因此在逻辑上均是对等的,称为“细胞元”,这就为 Web 3D 上的多媒体数据传输提供了先天的高速支持。同时为了适应 Web 显示需要,Archer 对 3D 场景管理管理方式也进行了优化,以适应动态加载场景数据的需求,加入 SmartCHC 算法等等。
Archer“云游戏”平台和 First Realms Plan 不能解决所有问题,尤其是同质竞争问题。“云游戏”不是游戏开发者的救命稻草,只是一种手段,一个工具,你可以利用这个工具为你的创意服务,更好的服务玩家。好的游戏是用心做出来的!被玩家记住的游戏永远是尊重玩家的游戏!
最后,在当前国内的游戏开发环境下想诞生真正精品游戏很难,只能尽自己一份力了!