收藏| 一些可供参考的游戏出海技术架构与经验总结 | U刻
  • 收藏| 一些可供参考的游戏出海技术架构与经验总结

    栏目:技术分享

    对于中国游戏产业来说,2017年至今是一个不太平静的时间段。在平台化以及全球服的大趋势之下,游戏玩家们的付费意识有了明显提升。受益于此,国内涌现出一批独立游戏开发者和工作室。在网易、腾讯等游戏巨头笼罩之下,这些游戏厂商们将目光纷纷转向海外市场。

    同时,无论是传统的端游、页游平台,还是已成为主流的手游平台,在内容和玩法之外,都越来越重视游戏体验本身。7月21日,由UCloud举办的“UCan下午茶”沙龙成都站,UCloud架构总监周浩城等五位嘉宾作为游戏全球化先行者的代表,从游戏的云端部署、技术架构、玩法设计、市场观察等角度,分享了他们在游戏全球化过程中的实践与思考。

    全球化背景下,出海业务的云端实践

    海外情况错综复杂,产品全球化对于底层IT架构提出了新的严峻挑战。UCloud于2012年成立,至今已有6年时光,凭借其覆盖众多国家和地区的海外节点与骨干网络,以及稳定可靠的底层技术架构,帮助数百企业成功出海。

    在这个过程里,UCloud的研发团队也遇到了很多挑战,来自UCloud互动娱乐事业部架构总监周浩城结合自身经验,现场分享了在为用户提供出海服务时,遇到的几个常见挑战和解决方案。

    • 挑战一:海外运营商及运营情况复杂,会出现突然被上联运营商限带宽,却没有收到任何反馈等情况,当遇到流量洪峰时,网络将严重拥堵;

    解决方案:1、采用模拟实际攻击的方式,来测试从各个国家、地区、各个线路到数据中心整条链路是否OK。通过测试,可以知道海外的上联线路被限了、整个机房的安全检测、封堵、清洗的流程是否正常工作等,然后针对具体问题定制解决方案;2、增加运营商合作渠道,当某一运营商出现问题时,切换数据中心的网络服务,在这个迁移的过程中,需要做到用户无感知。

    • 挑战二、封堵攻击流量,凌晨联系不到运营商。对于一些海外的运营商尤其是基建比较弱的地方,其服务并非24小时在线,尤其是凌晨时分网络出现问题时,基本上无法及时联系工作人员对接处理;

    解决方案:让运营商提供自动封堵的接口,一旦出现攻击,UCloud可以自动调度骨干网上封堵接口,在骨干网上拦截攻击流量。

    • 挑战三:大网路由选路会出现次优路径,如特殊情况下台湾到香港公网延迟突然从20ms飙升到80ms;

    解决方案:业务覆盖。根据用户的业务建立数据中心的覆盖范围,通过天眼监控系统监控该范围内的网络访问、丢包情况等等。如高雄某个时刻出现了丢包问题,系统会自动抓监控点到数据中心MTR的图,用户可以通过MTR,查看丢包节点。

    • 挑战四:部分国际运营商区分国内路由和国际流量,如韩国、泰国、印尼的国际带宽和国内带宽是分开算的;

    解决方案:针对这种情况,UCloud研发了一个具有深度包检测功能的工具ShockWave,它可以根据选取的IP地址,按照协议,分析出流量/包量的趋势,并按照运营商、地域对流量进行统计并支持排序。获取每个国家、每个运营商的数据后,可以为以后的流量采购建立数据基础。

    • 挑战五:海外回国需要单独引入回国线路 ;

    解决方案:扩建数据中心,并将全球的数据中心全部联网。下图为UCloud全球骨干网示意图,绿色代表已接入的骨干网,红色代表计划建设的可用区,通过供应商提供的多条海缆,建立自主可控的网络,保证数据中心的连接不会出现丢包等情况。

    除了上述策略,UCloud基于出海需求,研发出了高速通道UDPN、全球动态加速PathX、SSH加速服务GlobalSSH等多种解决方案。

    聊聊小游戏这个“风口”

    微信小游戏、QQ轻游戏和Facebook Instant Game 已经成为游戏行业新的“风口”。“海盗来了”在微信小游戏上已经实现了月流水超亿的表现。武汉镜像科技技术总监曾嵘现场详细分享镜像团队在立项、开发、上线过程中的实战经验。

    目前,市面上常见的小游戏类型大概分为四种:微信小游戏、Facebook Instant Game、QQ玩一玩以及Google Play Instant。目前,国产主流HTML5引擎对微信小游戏、支持 QQ 玩一玩以及 Facebook Instant Game这三种类型都具有较好的支持,并且支持IDE 、JavaScript/TypeScript及跨平台开发。

    与其他技术采用 HTML5 技术不同的是,Google 依然使用 APK 作为发行包,采用 JAVA/Kotlin 作为开发语言。它提供更高的APK大小限制(10MB),Google Play Instant 还支持可执行代码和游戏资产的渐进式下载,并允许开发人员使用NDK 和游戏引擎与现有的工具链结合使用。

    在性能上,微信小游戏使用的是修改过的渲染引擎和 JS 引擎,JavaScript 引擎执行性能低于原生 HTML5 浏览器,性能较差;QQ玩一玩是经过渲染的引擎,QQ轻游戏的整个质量比微信好很多,但稳定性较差;Facebook Instant Game基于HTML5开发,它需要在网页上呈现,性能非常好,基本上没有卡顿;Google Play Instant使用的是APK机制,性能是非常好的。大家可以根据自身的游戏定位和性能需求来选择合适的游戏类型。

    目前,小游戏市场已经经过了野蛮的增长阶段,市面上有大量低质量与同质化严重的小游戏,同时由于微信大力打压诱导分享机制,所以,诱导分享现今也无法对游戏运营起到太多作用。因此,在游戏立项上,曾嵘基于自身的开发经验给出了一些实用、有效的建议:

    • 微信封锁了好友链,游戏需要建立自己的好友链。微信虽然能够看到好友榜的信息,但那只是一个黑盒子,只能放东西,不能存东西。
    • 需要用户主动自发分享,不要使用诱导分享,可以通过分享获取小游戏资源的方式代替原来的分享复活等机制。
    • 谨慎做对战类游戏。小游戏是一种轻量级游戏,而对战游戏通常会给玩家的带来非常强的挫败感,尤其在移动端,强烈的挫败感会导致大量用户流失。
    • 放置类玩法比较受欢迎。
    • 在设置小游戏玩法时,一定要基于微信的规则去做。

    出海游戏全球服架构及解决方案解析

    一款成功的全球游戏离不开后端技术和运维,但全球各地网络质量参差不齐,国与国之间的网络拥堵,导致国际网络访问经常出现延迟、丢包等问题,给后端支持和运维人员带来了庞大的工作量,亦严重影响终端用户的使用体验。

    UCloud互动娱乐事业部架构师沈皓现场为大家阐释了游戏全球化的三种主流架构:纯网络转发的集中部署、分布式业务部署、分布式部署+网络优化转发综合部署,及其业务逻辑,并结合UCloud出海游戏成功案例,讲述不同架构的使用场景及优劣势分析。

    目前,市场上比较热门的游戏依然是对战类游戏。区别于传统PVE的游戏,对战类游戏着重展现人与人之间的竞争。每一次战斗都是智力、运气、策略的挑战。通过天梯激发人们的好胜心,并通过组队、地图场景、游戏道具(卡牌)以及其他社交类元素来增加游戏自身的趣味性、黏着性。

    基于对战类游戏的玩法和策略,这类游戏有四大特性:UDP和帧同步,数据包交互量巨大;玩家快照和帧数据保存需要高性能大容量的内存存储;网络稳定要求高;架构主要以模块化为主,有的甚至可以两地三中心容灾。而云平台的产品,可以为用户解决这些问题。

    下图为UCloud数据中心网络设计图,图上有几个叫可用区的方框,这个其实就是传统意义上的机房,公有云在此基础上开发出了可用区架构,将机房池化,网络出口独立通过不同的物理路径走到不同的出口POP点,这个POP点是UCloud自建BGP和运营商建立连接的地方。

    这种方式可以将所有的机房资源池化并通过专线打通内网,为用户免费提供相同地区的不同机房网络互通,可以方便用户实现跨机房高可用的容灾架构,同时多POP点也可以保证网络出口的持续高可用,不论是物理路径问题还是运营商本地城域网故障(比如北京本地),都可以进行规避。

    对战类游戏的框架设计浅析及快速上线

    游戏开发除了需要好的设计及创意外,如何快速上线也是大家关心的问题,特别是出海游戏,进度缓慢很可能会导致自己的目标市场已经被占领。LeanCloud的游戏事业部首席工程师于振宇以对战类游戏为切入点,详细讲解了开发中遇到的痛点及阻碍开发进度的常见问题,现场与大家探讨了如何加快游戏的开发部署上线。

    对战游戏大概可以分为弱联网、回合制、MMORPG、MOBA四类:

    • 弱联网的游戏。它的实现方式大部分和单机游戏没有太多的区别,首先发起战斗,服务端把战斗过程回馈给客户端,客户端进行战斗的重演;
    • 回合制。对于实时性要求不高,只要在回合操作内,完成对服务端的共性就可以了;
    • MMORPG。对游戏实时性要求比较高,这种游戏一般是采用状态同步去做开发;
    • MOBA。与前三者相比,对于实时性要求最高,一般采用帧同步的方式。

    那么,如何实现这些游戏的框架设计呢?下图是一个简化的对战类游戏设计框架示意图,客户端会先向路由服务器请求一个大厅的地址,请求到大厅地址之后,系统会根据用户选择的战斗连接到具体的游戏服务器,这背后就是数据服务器的支撑。

    具体连接时序为,客户端首先向服务器请求大厅的地址,然后返回大厅地址,客户端向大厅服务器发出请求连接大厅,根据玩家的需要选择创建房间,再返回房间地址,断开大厅服务器连接,最后是客户端连接房间。

    那么,开发者如何进行快速开发和上线?首先是连接,需要一些接口传递gameVersion的版本号,可以根据游戏版本号路由到不同版本的服务器;第二步是匹配,包括创建房间和加入房间;第三步数据同步,主要是Object 类型和CAS 检测;最后一步,自定义事件,这个相对简单,就是一个消息的ID和消息的Date。最后,于振宇介绍到,LeanCloud发布了一个新的服务——Play,提供可扩展的后端云服务,能够灵活匹配玩家接口、支持Unity引擎,并实现了多人实时通信功能。

    如何从一无所有到最终完成互动电影制作

    从2015年的火爆到2016年的平静至2017年的低谷,再到2018年唱衰,VR行业一直都存在着诸多问题。来自飓风地带的CTO夏思源带着这些问题,以从一无所有到最终完成互动电影的制作流程为例,进行了翔实而有趣的分享。

    夏思源介绍到,互动电影制作的全部流程,主要包括剧本构建、世界观设定、概念设定、剧情内容丰满、玩法设计、实现与测试、场景搭建与角色制作、动画制作、以及最后的优化与完成八大步骤。下面对其中的几个关键点进行展开:

    • 剧本构建。剧本的主要目的是确定要做一个什么样的游戏,它的价值观、主题、表现形式是什么,以及它的世界观和它应该带给我们的玩家一个什么样的体验和心情,所以剧本的大纲构建需要放在第一步,而且十分重要;
    • 世界观设定。选定了剧本大纲之后,接下来要确定剧本大纲所展现的蓝图、设计并内容细化,从而去奠定世界观,让制作人、工作人员,观众、以及用户知道要做的是一个什么样的东西;
    • 玩法设计、实现与测试。玩法制作上,可以做一个比较简单的编辑方式,让策划来进行整个关卡的设计和安放。在完成整个游戏之后,需要内部人员对游戏关卡进行体验。这里,也可以邀请海内外玩家或者非玩家体验,对目标人群进行画像;
    • 场景搭建与角色制作。这块可以直接按照商业游戏的标准进行搭建,制作场景的时候,可以出一张很简单的图,把整个场景的分布和格局做出来。角色制作跟场景搭建基本是一样的,只是留存会略有区别。整个制作过程为概念设计到细化,到整体调优;
    • 动画制作。第一步还是传统的绑定角色,接下来在整个动作阶段全部使用演员,用Vicon(运动捕捉系统)进行捕捉,利用Dynamixyz(面部捕捉系统)进行面部捕捉,然后用MotionBuilder对动作进行修正,在UE4中进行配制,最后调整优化,这整个也是一个拍戏的流程。

    结语

    目前,全球人均游戏时间仍呈现上升趋势。而随着技术的革新和人文领域的不断挖掘,出海游戏的内涵和应用必将愈加丰富,游戏正在突破传统休闲娱乐领域,跨界到社会更多的应用场景,相信与游戏互融共生的电竞、直播、VR等产业生态也将更加完善。

    7