下面相關的隻是本人開發中遇到的坑,記錄下來,友善日後檢視。
架構方面:
1、伺服器架構:
a) 遊戲大廳伺服器,資料伺服器要和遊戲邏輯伺服器分離,要保證玩家在對戰進行中是直接和邏輯服建立socket連接配接的,這樣才能確定低延遲,保證幀同步的穩定性。
2、用戶端架構:
a) 要保證邏輯和渲染的分離,邏輯幀定時向伺服器發送幀資料,伺服器彙總定時下發,渲染幀根據邏輯位置跟進渲染,當有延遲或者斷線時,模拟之前的操作,等待新資料或重新連接配接。
邏輯相關:
1、遊戲開始幀必須一緻: 第一幀伺服器要等到所有用戶端都有上行操作,才開始同步。如果不這樣,就會導緻所有用戶端的不一緻性。
2、慎重選擇第三方庫,包括尋路相關,因為第三方庫很多都是非實時調用的方法,但是幀同步必須要求邏輯幀實時。
3、浮點數: 關于浮點數的使用必須統一進行截斷,每一個參與計算的邏輯位置,每一個距離判斷的平方值等等,都需要進行截斷,否則不同機型,不同CPU就會造成資料差異,導緻整場戰鬥不同步。
4、尋路: 幀同步最好不要使用實體引擎,否則伺服器很難驗證資料的正确性,上線後對于外挂等無法鑒定。使用統一的尋路算法,邊界位置通過尋路導出最近點即可。
5、子彈等技能相關: 要確定所有用戶端上子彈打中被擊者的幀數一緻,表象上可以有平滑的細微不同,否則一味追求表現完全一緻,則很可能整場戰鬥同步出現問題。
6、效率問題: 幀同步必須保證穩定的幀率,移動和技能相關才能表現流暢,是以,一定要降效率提高,保證整場遊戲都在30幀以上。否則會出現頻繁卡頓,影響遊戲的進行。(這個問題還需要持續優化,目前隻能優化到50%。),尤其是動畫系統,NGUI,UGUI等的效率。
7、随機庫: 保證伺服器和每個用戶端計算出的随機數一緻,封了一個庫,每局開始戰鬥,由伺服器生成随機種子下發緻每個用戶端,每個用戶端每次随機都使用該種子在同一庫中進行随機,確定每次随機出的結果一緻。
8、日志: 由于不規範的代碼很有可能導緻不同步現象,是以每一局對戰的擊中,傷害,總幀數等等做好記錄,友善随時查詢不同步現象。
(待後續更新)