CS模式网络游戏的运动同步总结
概述
? ? ? ?目前有2種網(wǎng)絡游戲拓撲結(jié)構(gòu):Peer to Peer和Client/Server模式。在RTS類型的游戲中大都使用Peer to Peer的幀鎖定同步算法(如紅警、帝國時代、war3等)。目前主流引擎都自帶的是Client/Server模式的服務器(如Unity3d, UE4等)。在此推薦《multiplayer game programming》,該書對幀同步算法和CS模式的同步都有詳細的闡述;并且該書介紹的對象同步思路與ue4的思路類似。
?
本文只對CS模式下的運動同步進行總結(jié),CS模式下,server是絕對的權威,一切以server為準。
記住:延遲是無法消除的,要盡可能地隱藏延遲,讓玩家具有良好的體驗。
?
先定義一個符號:
? 運動狀態(tài) S: ? S表示某個運動狀態(tài)(如位置、速度、轉(zhuǎn)速等)
? 操作事件 ?I: ? I表示運動輸入命令事件(如 加速度、立即停止、力等)
? 突發(fā)事件 E: ?如受到阻擋、炮彈沖擊等非人為直接輸入。?
?
0. Round Trip Time(RTT)
? ??
1. 啞終端方式(dump terminal)
? ? 類似早期的終端,只發(fā)送鍵盤和鼠標輸入給服務器,客戶端不具有邏輯計算功能。
? ? 時序圖如下:
? ? ??
? ? ? ?如上圖所示,客戶端狀態(tài)需要服務器同步過來,自己沒有主動性,表現(xiàn)出一卡一卡的體驗。
? ? ? ? 用戶的輸入需要過RTT后才能得到反饋,客戶端的狀態(tài)比服務器滯后RTT/2時長。
?
2. client?Interpolation
? ? 還是使用的啞終端方式,服務器給出狀態(tài)a,b;然后客戶端使用ab的插值進行平滑過渡。
? ? 時序圖如下:
? ? ??
? ? ?客戶端比服務器滯后RTT/2 + 包同步間隔,客戶端邏輯帶有內(nèi)插值功能。
?
3. client prediction & server correction
? ? 客戶端具有預測功能(和服務器具有同樣的代碼邏輯),服務器會將狀態(tài)同步到客戶端,然后客戶端進行較正。這個里面細節(jié)較多,主要分2個方面
進行考慮:
? ? a. ?非本地玩家(機器人、其它遠程玩家)的運動同步
? ? ? ?時序圖如下:
? ? ? ? ?
? ? ?客戶端0收到同步消息時,計算出當前服務器的狀態(tài);然后我們并不能立即用這個狀態(tài)(會造成突兀抖動),需要進行插值平滑過渡到該狀態(tài)。
?
? ? b. 本地玩家的運動同步
? ? ? ?時序圖如下:
? ? ? ??
? ? ?本地玩家端會立即響應用戶輸入,這樣會比服務器端狀態(tài)提前。當沒有用戶輸入時,收到服務器的同步校正信息后,處理情況跟simulate模式相同。
? ? ? 要注意輸入的時間戳和服務器發(fā)送的輸入處理結(jié)果時間戳, 它們都是該客戶端的本地時間。
?
? ? c. 上述情況的合成時序圖
? ? ? ? ?將上述2個圖拼在一起進行觀察。
?
? ? ?d. ?我們還需要平滑地插值
? ? ? ? ? ? 為了避免出現(xiàn)抖動,我們都到服務器的同步校正后,不能立即設置運動狀態(tài),需要進行平滑過渡到該狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的CS模式网络游戏的运动同步总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卖萌
- 下一篇: 极度瘦身:打造200MB的XP安装盘(转