日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

帧同步和状态同步(一)

發布時間:2023/12/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 帧同步和状态同步(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

幀同步

什么是幀同步:幀同步常被RTS(即時戰略)游戲常采用。在游戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到服務器, 服務器收到后并不計算游戲行為, 而是轉發到所有客戶端。這里最重要的概念就是 相同的輸入 + 相同的時機 = 相同的輸出。

實現幀同步的流程一般是:

  • 同步隨機數種子。(一般游戲中都設計隨機數的使用, 通過同步隨機數種子,可以保持隨機數一致性)

  • 客戶端上傳操作指令。(指令包括游戲操作和當前幀索引)

  • 服務器廣播所有客戶端的操作。(如果沒有操作, 也要廣播空指令來驅動游戲幀前進)。

  • 因為幀同步的特性, 我們可以很方便的做出戰斗回放:服務器記錄所有操作, 客戶端請求到操作文件再執行一次即可。

    幀同步的特性導致客戶端的邏輯實現和表現實現必須完全分離。Unity中的一些方法接口(如 Invoke, Update、動畫系統等)是不可靠的,所有要自己實現一套物理引擎、數學庫,做到邏輯和表現分離。 這樣即使Unity的渲染是不同步的,但是邏輯跑出來是同步的。

    我曾經參與過一個飛機類彈幕游戲的項目,它的同步方案就是幀同步, 可以完美的播放回放, 并實現服務器上加速驗算。


    狀態同步

    什么是狀態同步:同步的是游戲中的各種狀態。一般的流程是客戶端上傳操作到服務器,服務器收到后計算游戲行為的結果,然后以廣播的方式下發游戲中各種狀態,客戶端收到狀態后再根據狀態顯示內容。狀態同步最廣泛的應用應該是在回合制游戲中。

    狀態同步其實是一種不嚴謹的同步。它的思想中,不同玩家屏幕上的表現的一致性并不是重要指標, 只要每次操作的結果相同即可。所以狀態同步對網絡延遲的要求并不高。像玩RPG游戲,200-300ms的延遲也可以接受。 但是在RTS游戲中,50ms的延遲也會很受傷。?
    舉個移動的例子,在狀態同步中, 客戶端甲上操作要求從A點移動到B點,但在客戶端乙上, 甲對象從A移動到C,然后從C點移動到了B。這是因為, 客戶端乙收到A的移動狀態時, 已經經過了一個延遲。這個過程中,需要客戶端乙本地做一些平滑的處理,最終達到移動到B點的結果。

    所以國產RPG游戲中,動畫的特效一般做的比較絢麗(大), 攻擊的時候給人感覺是擊中了。放技能之前一般也有一個動畫前搖,同時將攻擊請求提交給服務器。等服務器結果返回時,動畫也播放完畢了,之后就是統一的傷害效果和結算。


    狀態同步和幀同步的比較和選擇:

    比較:

    ?狀態同步幀同步
    流量相對高相對低
    回放記錄文件大記錄文件小
    安全性服務器實現邏輯,安全性高邏輯在客戶端,反外掛壓力大、無法避免開圖掛
    服務器壓力
    戰斗校驗協議加密,內存混肴,誤差校驗,無法徹底解決。服務器可以重啟跑一遍戰斗。
    網絡卡頓的表現瞬移,回位,莫名掉血戰斗卡頓
    實現調優狀態同步方式,客戶端需要做插值處理。客戶端按照單機方式開發,保證邏輯層和表現層分離。邏輯層不要用到浮點數,不要用不確定順序的邏輯結構。對于物理引擎和浮點數計算要不能使用Unity的。

    選擇:對于單位比較多的即時策略游戲,幀同步是很好的選擇。反過來,如果玩家比較多,狀態同步更合適,安全性更高。


    總結

    以上是生活随笔為你收集整理的帧同步和状态同步(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。