https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
较早的文章了,介绍了source引擎在多人对战网络同步(尤其是用于fps游戏)中的做法,在行业内影响了很多多人对战游戏的开发。
在了解了其中的技术和概念之后,对于玩家来说,就会知道为什么fps游戏对射的时候不要静止,要来回跑,除了让对方难以瞄准外,物理技术上也是如此哦
基本概念
这个图可以说很好地表达了,客户端和服务器之间的关系。
- 服务器一般以一定帧数(比如30帧,也可以更高)的速度tick,然后以一定频率(一般低于tick的频率)来发snapshot给客户端
- 服务器常常也buffer一些指令
- 客户端以一定频率发送input的指令(和tick帧数保持一致),然后本地buffer一定时间(比如100ms的服务器传过来的snapshot)
- 按下鼠标到网络packet发出--客户端帧数越高越好
- 网络延时(ping)--延时最大头
- 服务器上面buffering的时间--可以根据重要性进行取舍
- 服务器上面执行时间(帧数越高越低)
- 服务器执行结果下行,又是一个网络延时(ping)--延时最大头
- 客户端buffering时间
- 客户端显示时间(敌人倒地飙血等等)
- entity移动,服务器发过来的是一个新的位置,那么就通过一些插值(可以是线性,可以是曲线(走一个寻路))
- 本地纠正,如果服务器验证和本地预演不匹配,那么一个瞬移就太糙了,可以走一个平滑的插值过去
- 预演做的更好:比如加上搓招,前摇等过程,尽可能把能预演的都做好,把“拙”藏好
- 降低延时:
- 网络路线选择的更好
- 让服务器和客户端tick的速度更高
- 可以的话减少buffering
- 可以的话减少移动插值的delay
- 你看见敌人的瞬间就躲到掩体里,但是敌人还是爆了你的头--这是有可能的,你的即时反应还没有同步到服务器上,而服务器上计算命中是一个延迟补偿的,所以本地虽然没看到,但是还是被击中了
- 移动的shooter比静止的shooter有优势,这里是两个原因
- 上面延迟补偿部分提到了,移动的人对于另外一台的机器上的人来说,和服务器上不会在像素级完全一致
- 另外就是有移动插值的存在,我们看动的物体总是有一定的延时,
109



被折叠的 条评论
为什么被折叠?



