转自:http://www.gameres.com/489361.html
腾讯一下出了两款MOBA游戏,全民超神,王者荣耀,玩了一下,效果不错,就分析了一下它底层的一些技术,发现一个是采用的状态同步,TCP协议,另一个是采用的帧同步,UDP协议。自从去年了解到即时游戏帧同步这门技术,我就一直关注使用这个技术的游戏,一直没有发现,虽然我们自己的游戏也是采用的帧同步,毕竟还没有上线,现在线上有帧同步的游戏,效果还挺好,有点小激动。所以就写了这篇文章,分享出来大家一块研究。
先说一些题外话,感慨一下,没兴趣的直接略过。
做了这么多年游戏了,深深知道一个游戏的成功需要多方面的因素,不仅需要人和,有的时候也需要天时地利,但作为一个游戏开发者而言能决定就是人和,而这也是游戏能成功的基础,有一帮人能够全身心的投入去开发一款游戏,不断的打磨甚至调整方向,面对问题能够及时反馈,不断迭代,就像做一个互联网产品一样,在这个过程中团队里的所有人都能够互相信任,不厌其烦的对产品进行改动,每一次的信任来源不是为大家打鸡血画饼,而是实实在在的数据分析以及努力总结原因后的理性决策。如果以上能够坚持的话,先不说创新,最起码游戏可以做到某一品类的极致,我想在任何的市场环境下,只要这个品类还没死,总有你的一席之地,在我看来很多游戏死了,很多原因是做的还不到位,向当年抄COC的游戏很多,最后缺没有一款成功的,而截至到目前COC的利润还在不断上升,如果国内抄袭者真能做到COC的一样的体验,我想一定会有成功的。
那又有人要说了,怎样才能做的比别人还好呢,这个问题确实比较复杂,我感觉首先一定要有合适的人,什么是合适的人呢,从3个方面考察:责任心积极性、学习能力、能力,我把能力放在最后是因为如果前面两个条件满足的情况下,这个人一定会变得有能力,然后就是需要有个高的要求,目标就是精品,这个不是光说说就行了,从策划设计,程序实现,美术都要向着最高的标准要求,要比市面上的都要优秀,绝对不会为了各种其他因素(时间点,实现复杂)有任何妥协。最后是需要有点耐心,合理安排计划时间,高效率完成,其实这点事最难的,团队里的人很多,游戏制作有的时候经常需要反复,经常就是初期很有激情,中期不断磨灭,到了后期(尤其是项目遇到困难时候)就比较松懈了,如果是没有耐心的人估计在一起继续工作都是问题了,还怎么谈之前的事情。团队是需要打磨的,如果你有一支这样的团队,那真的要好好的珍惜。
好了,这是我对于游戏开发的一些感慨,还是回归正题吧,对于一个游戏来讲,战斗就是灵魂,如果战斗做不到极致,其他方面做的再好也是徒劳,这几年,也参与了很多游戏的开发,其中有很多游戏是从决策到死掉全程参与,深有感慨。从端游到页游 从页游再到手游 每一个新市场机会出现的时候,都是从闭着眼睛就能赚钱到大部分赚不到钱过度,对游戏的开发技术都要求也是越来越高,只不过每个市场到成熟的时间都被大大缩短了。对于战斗来讲很多都是策划脑补的跟实际做出来的完全不是一回事,很多原因都是战斗方案选型就是错误的。
从程序角度来讲,我把战斗从两个维度分类:
1、从操作方式上分为回合操作、即时操作。
2、从交互方式上分为 离线战斗 联网战斗,这个地方需要说明一下,有些游戏虽然也能进攻别人,例如COC 但是因为战斗的时候,另外一个人是不可以操作的,类似于这样的战斗也可以称为离线战斗。
基本上所有的战斗都是以上两种方式在某种程度的组合而已,例如梦幻西游可以认为是联网战斗、回合操作类型。
最近比较火的全民超神,王者荣耀,属于 (联网战斗|离线战斗)即时操作类型。
最新网易出的功夫熊猫 属于 (联网战斗|离线战斗)即时操作类型,相对于dota类的全民超神、王者荣耀,他对延迟要求的更高了。
如果在立项初期,项目计划时候不确定游戏的操作类型,以及网络要求,做得后期要想调整的话,改动是致命的,假设按照之前时空猎人的方式实现的纯离线战斗及时游戏,最多也只能做做离线PVP,如果想增加联网PVP的功能的话,对于程序来讲几乎需要重写战斗。
随着移动游戏市场越来越成熟,对于战斗的要求也在提高,原来做一款ARPG,只有单机玩法就足够了,不需要开发实时PVP,但是现在市面上的ARPG不仅可以联网PVP,甚至可以联网组队PVE了,所以我感觉如果现在再去做游戏的话,只是一个单机玩法,或者是离线PVP玩法已经远远不能满足现代玩家的口味了。
我认为现在战斗系统需要满足一下几点。
1、一定要有离线PVE玩法,或者离线PVP玩法,可以在让玩家在网络不好的时候消遣,节省流量。(全民超神、王者荣耀在5V5匹配时候都有一定几率匹配到离线战斗,这个时候是不耗流量的,其他人全是AI控制的)
2、一定要有在线PVP,在线PVE,能够让玩家在网络比较好的时候,实时竞技。增加可玩性。
3、战斗中,尽最大程度节省玩家的流量,例如全民超神这款游戏,一场30分钟的战斗基本上要消耗掉20M的流量,而且此类游戏大部分是玩的联网战斗,基本上在非wifi情况下没法玩。
4、需要有战斗回放机制,可以让策划设计离线玩法的时候更自由,例如COC,战斗回放基本变成了它游戏的一部分。
5、防作*弊,如果有离线玩法的话,一定有机制对离线玩法的结果进行验证,要不然等你游戏真火了,你就知道错了。
6、实现难度相对较低。
对于联网游戏来讲,同步的方式主要分为两种,状态同步、帧同步。
1、状态同步:顾名思义,是指的将其他玩家的状态行为同步的方式,一帮情况下AI逻辑,技能逻辑,战斗计算都由服务器运算,只是将运算的结果同步给客户端,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等就可以了,但是为了给玩家好的体验,减少同步的数据量,客户端也会做很多的本地运算,减少服务器同步的频率以及数据量。
2、 帧同步:RTS游戏常采用的一种同步技术 ,上一种状态同步方式数据量会随着需要同步的单位数量增长,对于RTS游戏来讲动不动就是几百个的单位可以被操作,如果这些都需要同步的话,数据量是不能被接受的,所以帧同步不同步状态,只同步操作,每个客户端接受到操作以后,通过运算可以达到一致的状态(通过随机种子保证所有客户端随机序列一致),这样的情况下就算单位再多,他的同步量也不会随之增加。
下面我们从以上的5个方面对各自实现方式进行描述:
总结一下:
1、对于回合制战斗来讲,其实选用哪种方式实现不是特别重要了,因为本身实现难度不是很高,采用状态同步也能实现离线战斗验证。所以采用帧同步的必要性不是很大。
2、对于单位比较多的RTS游戏一定是帧同步,对于COC来讲,他虽然是离线游戏,但是他在一样输入的情况下是能得到一样结果的,所以也可以认为他是用帧同步方式实现的战斗系统。
3、对于对操作要求比较高的,例如MOBA类游戏有碰撞(玩家、怪物可以互相卡位)、物理逻辑,纯物理类即时可玩休闲游戏,帧同步实现起来比较顺畅,(有开源的Dphysics 2D物理系统可用 它是Determisti的)。
4、对于战斗时大地图MMORPG的,一个地图内会有成千上百的玩家,不是小房间性质的游戏,只能使用状态同步,只同步自己视野的状态。
5、帧同步有个缺点,不能避免玩家采用作*弊工具开图。
相关推荐
输入数据data为8 bit并行数据流,基本结构为数据帧,帧长为10字节,帧同步字为H“FF”...3、在锁定状态时,如连续出现3次错误的帧同步字,则帧同步标志输出无效,系统重新进入搜索状态;否则继续输出有效的帧同步标志。
此压缩包"非常好的基于状态帧同步的战斗系统游戏源代码100%好用.zip"中包含的游戏源代码,提供了一个实际应用状态帧同步算法的示例,对于学习游戏开发和网络编程的开发者来说极具价值。 首先,我们要理解什么是状态...
在Unity3D中开发网络游戏,帧同步是一种常用的技术,它主要用于实时交互的多人在线游戏中,确保所有玩家看到的游戏状态保持一致。"简单帧同步客户端和服务器端"项目就是基于这一技术构建的,允许多个玩家通过遥杆...
本资源“C#异步服务器+帧同步飞机”提供了一个结合了C#异步服务器编程和Unity引擎的帧同步飞机游戏实例,帮助开发者深入理解并实践这些关键技术。 首先,我们来关注C#异步服务器。在网络游戏或实时应用程序中,...
帧同步的基本思想是每个客户端都会根据上一帧的数据预测下一帧的状态,并在网络传输延迟后进行调整。当涉及到物理碰撞时,每个客户端都需要准确地模拟物理效果,如重力、速度、碰撞检测等,确保不同客户端之间的一致...
"帧同步"是网络游戏中常见的一种同步技术,用于确保多玩家在同一时间看到相同的游戏状态。在这个"Unity3D帧同步飞机大战"项目中,我们将探讨如何在Unity3D环境中实现帧同步机制,创建一个多人在线的飞行射击游戏。 ...
帧同步是一种在网络游戏中广泛应用的技术,它的主要目的是解决多人在线游戏中的实时交互问题,确保所有玩家看到的游戏状态是一致的。本资料集包含了关于帧同步的深入解析,对于想要理解网络游戏运行机制,特别是对...
Unity帧同步极简框架是一种专为多人在线游戏设计的技术,旨在确保多个客户端之间的游戏状态保持一致,从而提供无缝的协作和竞技体验。本框架着重于简化实现过程,同时包含了多客户端同步、战斗回放和防作弊检测等...
Unity帧同步技术是一种在网络游戏中广泛使用的同步方法,它主要用于确保多玩家环境中...通过分析服务端和客户端的交互,以及如何处理和传递游戏状态,可以加深对帧同步原理的理解,为开发多人在线游戏提供宝贵的参考。
9. **示例项目**:提供的"unity帧同步"示例项目中,包含了客户端和服务端的实现,你可以通过学习和分析代码来理解帧同步的实现细节。 在实际项目中,帧同步是一个复杂而关键的环节,涉及到许多技术和策略的结合。...
本项目提供了Unity帧同步的演示版本,包括客户端和服务器端的实现。客户端基于Unity引擎,用于展示游戏场景和用户交互;而服务端则是用Skynet框架构建的,负责处理网络通信和游戏逻辑。 Unity引擎是一款广泛应用于...
3. **帧同步保持**:一旦确定了帧的正确起始位置,系统会保持这个同步状态,持续跟踪输入数据流中的帧边界。 在Quartus II中实现这些功能时,你需要创建一个VHDL设计实体,声明所需的信号,例如输入数据流、帧同步...
帧同步器的主要任务是检测连续比特流中的帧起始和结束位置,以便后续的解码和处理单元能正确解析信息。这通常通过比较预设的帧同步码或同步序列与接收到的数据进行。在Verilog代码中,学生可能会实现一个状态机来...
系统工作开始后,要连续3次确认帧同步字进入锁定状态后才输出帧同步标志。 在锁定状态时,如连续出现3次错误的帧同步字,则帧同步标志输出无效,系统重新进入搜索状态;否则继续输出有效的帧同步标志。 过滤掉虚假的...
【设计与实现】设计过程中,首先理解GPS信号的结构和同步原理,然后利用Xilinx开发工具,编写Verilog代码来描述位同步和帧同步的逻辑。完成设计后,通过仿真验证其正确性,最后将代码下载到FPGA硬件上进行实际调试。...
帧同步是多人在线游戏中常用的一种同步机制,它确保所有玩家在同一帧看到相同的游戏状态。在3D台球游戏中,帧同步尤其重要,因为玩家的每一次击球动作都需要精确到帧。具体实现时,客户端需要记录每个玩家的操作,并...
PCM30基群帧同步电路是数字通信系统中一个关键组成部分,主要负责在接收端对传输的PCM(脉冲编码调制)信号进行帧定位,确保数据的正确解码和处理。PCM30基群是PCM系统的一个基本单元,通常包含30个话路,每个话路的...
在游戏开发领域,帧同步(Frame Synchronization)是一种常见的网络同步技术,用于确保多玩家游戏中所有客户端看到的游戏状态保持一致。帧同步的核心是基于每个客户端的本地计算和定时信息进行同步,以达到游戏世界...