遊戲幀同步學習筆記

2021-10-08 17:21:51 字數 2354 閱讀 5041

三、幀同步

四、狀態同步與幀同步對比

現代多人遊戲中,多個客戶端之間的通訊大多以同步多方狀態為主要目標,為了實現這一目標,主要有兩個技術方向:狀態同步、幀同步。

1、什麼是狀態同步

狀態同步簡單來說就是同步遊戲中的各種狀態,當客戶端傳送遊戲動作到伺服器,伺服器接收到之後,通過計算遊戲行為的結果,然後廣播下發給客戶端遊戲中的各種狀態資料。客戶端接收到狀態資料後顯示內容。這種做法類似於各個客戶端都在遠端操作伺服器上的軟體。

2、狀態同步的流程

1)客戶端上傳操作到伺服器

2)伺服器收到後計算遊戲行為的結果(如技能邏輯、戰鬥計算等)

3)伺服器以廣播的方式下發遊戲中各種狀態

4)客戶端收到狀態後更新本地狀態(如動作狀態、buff狀態、位置等)

為了給遊戲玩家更好的體驗,減少同步的資料量,客戶端也會做很多的本地運算,減少伺服器同步的頻率以及資料量。

3、狀態同步的特點

狀態同步其實是一種不嚴謹的同步,它的思想中不同玩家螢幕上的一致性的表現並不是重要指標,只要每次操作的結果相同即可。所以狀態同步對網路延遲的要求並不高。例如:rpg遊戲中200~300ms的延遲對使用者來說是可以接受的,但在rts(即時戰略)遊戲中50ms的延遲卻會很受傷。

rpg遊戲:角色扮演遊戲(role-playing game),簡稱為rpg,

rts遊戲:即時戰略遊戲(real-time strategy game),簡稱rts。

1、什麼是幀同步

什麼叫做幀同步呢?伺服器收集客戶端手機傳送過來的操作,然後在特定的時間(收集完成之後),再廣播傳送給每個客戶端。客戶端根據接收到的輸入,進行同樣的邏輯處理,最終得到同樣的結果的過程。在實現上,一般都是以伺服器按固定的幀率,來蒐集每個客戶端的輸入,然後把這些輸入廣播給所有客戶端。由於每個操作指令到達所有客戶端的時間(幀)都是一樣的,所以每個客戶端運算的結果也是一樣的,也就是同樣的輸入就會得到同樣的結果。

幀同步是rts遊戲經常採用的一種同步技術,狀態同步中資料量會隨著需要同步的單位數量增長,而對於rts來講動不動就是幾百個單位可以被操作,如果這些都需要同步的話,資料量是不能被接受的,所以幀同步不同步狀態,只同步操作。例如遊戲中同步玩家的操作指令,操作指令包含當前的幀索引。

2、幀同步的流程

1)同步隨機種子:遊戲中設計隨機數的使用,通過同步隨機數種子可以保持隨機數的一致性。

2)客戶端上傳操作指令給伺服器,操作指令包含遊戲操作和當前幀索引。

3)遊戲廣播所有客戶端的操作,如果沒有操作也要廣播空指令來驅動遊戲幀前進。

3、幀同步的特點

幀同步主要依賴客戶端的能力,伺服器僅僅是做乙個**,甚至客戶端可以無需伺服器,通過p2p方式來**資料。由於只是**遊戲的行為,所以廣播的資料量比狀態同步要小很多。非常適合遊戲行為非常頻繁的動作遊戲,諸如飛行射擊、fps、rts(即時戰略)。

因為幀同步的特性,因此很容易做出戰鬥回放,即伺服器記錄所有操作,客戶端請求到操作檔案再執行一次。幀同步的特性導致客戶端的邏輯實現和表現實現必須完全分離。

幀同步的目的在於消除網路波動性帶給玩家的卡頓以及忽快忽慢的不良體驗。

在幀同步模式中,資料同步的頻率較高,網路延遲越小越好。由於tcp的滑動視窗機制和重傳機制,導致延時機制,導致延時無法控制。因此幀同步一般採用udp進行網路傳輸,但udp又會衍生出可靠性問題,對於客戶端,如果某些udp包沒有收到,就會出現丟幀的情況。

一般大型mmo arpg都採用狀態同步,由於狀態同步採用c/s架構,所有狀態由伺服器來控制,安全性比較高,但流量比較大。

幀同步採用的是囚徒模式,所有c端強制採用乙個邏輯幀率,從而保證輸出一致,其特點是流量小,安全性較差。

囚徒模式又叫鎖步模式,就是把所有參與對戰的客戶端看成排成一列的囚犯,這些囚犯們的左腳都被鎖鏈給連起來,如果要往前走,就只能同時邁步,如果其中某個人走快了或走慢了,都回讓整隊人停下來。各個客戶端網路延遲一般來說要求在50毫秒以內,如果有乙個客戶端網路卡住了,所有客戶端都要停下來等待。

c/s架構:client-server,即客戶端-伺服器結構

狀態同步

幀同步流量

相對高相對低

回放記錄檔案大

記錄檔案小

安全性伺服器實現邏輯,安全性高

邏輯在客戶端,反外掛程式壓力大

伺服器壓力大小

戰鬥校驗

協議加密,記憶體混淆,誤差校驗,無法徹底解決

伺服器可以重跑一遍戰鬥

網路卡頓表現

瞬移,回位,莫名掉血

戰鬥卡頓

實現調優狀態同步方式,客戶端需要做差值處理

客戶端按照單機方式開發,保證邏輯層和表現層分離,邏輯層不要用不確定順序的邏輯結構。

捕魚遊戲幀同步方案

設計原則 玩家在按下的時候,就會看到子彈射出去。這種設計注定了,玩家會收到其他玩家在之前時間射出的子彈 優先保證自己的準確性,其他玩家的準確性可惜部分犧牲 同步方案 伺服器按照固定頻率下發同步幀,假定每秒10幀。每幀資料報括幀號 4個玩家的炮台發射角度,沒有發射則發 90度表示空。通常客戶端的邏輯幀...

遊戲中幀同步與狀態同步

幀同步 什麼是幀同步 幀同步常被rts 即時戰略 遊戲常採用。在遊戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到伺服器,伺服器收到後並不計算遊戲行為,而是 到所有客戶端。這裡最重要的概念就是 相同的輸入 相同的時機 相同的輸出。實現幀同步的流程一般是 同步隨機數種...

遊戲幀同步的流程與實現

大綱 現代多人遊戲中,多個客戶端之間的通訊大多以同步多方狀態為主要目標,為了實現這一目標,主要有兩個技術方向 狀態同步 狀態同步簡單來說就是同步遊戲中的各種狀態,當客戶端傳送遊戲動作到伺服器,伺服器接收到之後,通過計算遊戲行為的結果,然後廣播下發給客戶端遊戲中的各種狀態資料。客戶端接收到狀態資料後顯...