天天看點

幀同步Moba遊戲相關的經驗總結

下面相關的隻是本人開發中遇到的坑,記錄下來,友善日後檢視。

架構方面:

1、伺服器架構:

a)       遊戲大廳伺服器,資料伺服器要和遊戲邏輯伺服器分離,要保證玩家在對戰進行中是直接和邏輯服建立socket連接配接的,這樣才能確定低延遲,保證幀同步的穩定性。

2、用戶端架構:

a)       要保證邏輯和渲染的分離,邏輯幀定時向伺服器發送幀資料,伺服器彙總定時下發,渲染幀根據邏輯位置跟進渲染,當有延遲或者斷線時,模拟之前的操作,等待新資料或重新連接配接。

邏輯相關:

1、遊戲開始幀必須一緻: 第一幀伺服器要等到所有用戶端都有上行操作,才開始同步。如果不這樣,就會導緻所有用戶端的不一緻性。

2、慎重選擇第三方庫,包括尋路相關,因為第三方庫很多都是非實時調用的方法,但是幀同步必須要求邏輯幀實時。

3、浮點數: 關于浮點數的使用必須統一進行截斷,每一個參與計算的邏輯位置,每一個距離判斷的平方值等等,都需要進行截斷,否則不同機型,不同CPU就會造成資料差異,導緻整場戰鬥不同步。

4、尋路: 幀同步最好不要使用實體引擎,否則伺服器很難驗證資料的正确性,上線後對于外挂等無法鑒定。使用統一的尋路算法,邊界位置通過尋路導出最近點即可。

5、子彈等技能相關: 要確定所有用戶端上子彈打中被擊者的幀數一緻,表象上可以有平滑的細微不同,否則一味追求表現完全一緻,則很可能整場戰鬥同步出現問題。

6、效率問題: 幀同步必須保證穩定的幀率,移動和技能相關才能表現流暢,是以,一定要降效率提高,保證整場遊戲都在30幀以上。否則會出現頻繁卡頓,影響遊戲的進行。(這個問題還需要持續優化,目前隻能優化到50%。),尤其是動畫系統,NGUI,UGUI等的效率。

7、随機庫: 保證伺服器和每個用戶端計算出的随機數一緻,封了一個庫,每局開始戰鬥,由伺服器生成随機種子下發緻每個用戶端,每個用戶端每次随機都使用該種子在同一庫中進行随機,確定每次随機出的結果一緻。

8、日志: 由于不規範的代碼很有可能導緻不同步現象,是以每一局對戰的擊中,傷害,總幀數等等做好記錄,友善随時查詢不同步現象。

(待後續更新)

繼續閱讀