type
status
date
slug
summary
tags
category
icon
password
经常玩fps游戏的都知道,同步机制是fps游戏中的重要一环,游戏中一般有帧同步和状态同步两种,这俩的具体区别到底是什么呢?
帧同步
核心是只同步玩家的输入,由客户端运行相同的逻辑代码计算出相同的游戏状态
大致的实现思路就是服务器接收所有客户端的输入,并将这些输入按帧打包广播给所有客户端。然后每个客户端根据相同的输入序列执行相同的逻辑计算,得到一致的游戏状态。
这就很明显了,帧同步的关键处理逻辑在客户端,服务器主要起到一个转发玩家输入的过程。在unity中,客户端处理帧同步,必然是要将具体的游戏更新逻辑放在FixedUpdate中处理的,这样才能保证所有客户端的更新频率一致。当然依赖服务器转发玩家输入,肯定会受到网络延迟等因素的影响,需要针对此问题用回滚机制做处理,或者使用插值进行平滑过渡也是一个办法。
了解帧同步后我们也很容易看出它的优点,那就是状态一致性高,因为所有的客户端都是基于相同的输入运行相同的逻辑,理论上是完全一致的,并且占用的带宽会低,因为只需要传输玩家的输入数据,数据量小。
状态同步
核心是直接同步游戏的状态。服务器负责计算游戏状态,并将结果广播给所有客户端。
实现思路是服务器运行游戏的逻辑代码,计算出当前的游戏状态。再将计算出的游戏状态(如角色位置、血量等)定期发送给所有客户端。客户端根据接收到的状态更新本地显示。
状态同步很明显就是将关键的处理逻辑放在服务器处理了,全部处理完后再将游戏状态发给所有的客户端,相比之下状态同步的实现就很简单了,客户端逻辑无需一致,只需要根据服务器的数据去更新显示就可以了(客户端狂喜),但缺点也很明显,就是会占用大量的带宽,尤其是对象数量多时,服务器压力会很大,响应也会置后,在fps游戏中的体验效果肯定也会大打折扣了
上文也只是我自己浅薄的看法,后续有空也会做demo出来看看效果,现在工作太忙,当牛马中~
- Author:lzzd
- URL:https://lazy-zed.com/article/server_3
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!