前言
《王者荣耀》属于典型的Moba类游戏,和《英雄联盟》属于同一种游戏类型,那么《王者荣耀》这种游戏是如何制作的?又需要学习哪些技术点呢?今天我们一起来分析一下。
Moba游戏是什么?
《王者荣耀》属于Moba类型游戏,Moba英文全称(Multiplayer Online Battle Arena)
缩写为Moba, 中文翻译为多人在线战术竞技游戏, 又称动作即时战略游戏, 这种游戏最重要的是玩家的手感,为了获得更好的玩家手感, 一般Moba类的游戏同步方式和传统MMORPG的状态同步方式不一样,采用的是帧同步,《王者荣耀》就是采用帧同步,也有使用状态同步的Moba游戏。
这里有个游戏开发交流小组 大家可以一起来学习交流
帧同步是什么
游戏服务器每隔一段时间(逻辑帧)采集各个客户端的玩家操作,然后把采集到的玩家操作,发往每个客户端,客户端自己来计算游戏逻辑,根据同样的玩家输入+同样的代码逻辑,得到同样的运行结果,这样每个客户端就同步了。
服务器每隔一段时间,这个一段时间是多长合适呢?原则上来说时间越短越好,时间越短,玩家操作响应反馈就越及时,但是随之而来的网络带宽和计算成本也增加了,于是就有了一个原则,在不影响玩家手感的情况下,越少越好,根据研究,玩家的反应时间约为50~100毫秒,所以帧同步设计为10~20帧,不会影响玩家手感, 据小道消息,暴雪的《守望先锋》每秒20帧。帧同步主要的业务逻辑全部都放客户端计算,所以服务器基本没有什么运算量, 性能好。由于所有的计算都放客户端,帧同步也有容易作弊的缺点。
帧同步比状态同步获得更好的手感
在网速正常的情况下,其实状态同步也能获得很好的手感,同时状态同步又是放服务器计算的更安全,为何我们不用状态同步做Moba而是用帧同步呢?状态同步和帧同步最大的区别在于网络波动的时候,网络经常会有波动,状态同步,如果服务器由于网络波动没有及时的发送状态数据包到客户端,这样客户端就会卡住(虽然时间很短,但影响手感),而帧同步就不一样,如果由于网络波动,帧同步客户端没有及时的收到玩家的操作,客户端还可以基于上一帧来做预测,因为玩家1秒能有3个不同操作就很不错了(一秒你能点几次按钮,自己可以测试一下),所以当网络波动的时候,通常基于上一帧的预测是非常准确的,所以帧同步应对网络波动的时候获得更好的手感。同时配合UDP的传送,能让手感更好。
《王者荣耀》采用了哪些技术?
《王者荣耀》整个分为:程序开发,美术设计,游戏策划。程序开发分为客户端与服务端两个部分,客户端采用的是现在应用比较广泛的3D游戏引擎Unity来开发,服务端采用的是C++来开发。一般像腾讯这些大公司都会获得Unity引擎的源码授权,每个项目开始的时候,都会自己定制渲染管线来获得最佳的游戏画面效果与性能,同时也会有自己的项目引擎框架。C++做服务器,性能非常的好,同时技术也非常的成熟,《王者荣耀》项目组也是之前做的一个项目转变而来,技术也积累了很久,服务端也有自己的一套框架。游戏美术分为游戏原画,角色建模,场景建模,动作粒子特效,游戏UI几个部分组成,原画负责设计每个英雄的美术风格,外形, 平面地图等,角色建模根据原画,把每个角色模型都建好,模型建好后,动作美术调好动画特效,游戏场景也类似,原画设计后,场景建模人员建3D场景模型,打上光照,最后烘培场景出来给程序使用。王者荣耀的策划做的很好,各职业的平衡也设计的非常好,这也是它受广大玩家喜欢的原因之一。
好今天的分享就到这里,喜欢王者荣耀,对王者荣耀技术感兴趣的同学,上面是客户端+服务器 视频教程 你们准备好自己开始做了么?^_^