幀同步和狀態同步(一)

幀同步

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

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

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

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

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

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

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

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


狀態同步

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

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

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


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

比較:

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

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


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444744.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444744.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444744.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

幀同步和狀態同步(二)案例分析

轉自:http://www.gameres.com/489361.html 騰訊一下出了兩款MOBA游戲,全民超神,王者榮耀,玩了一下,效果不錯,就分析了一下它底層的一些技術,發現一個是采用的狀態同步,TCP協議&#…

leetcode279 完全平方數

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。 示例 1: 輸入: n 12 輸出: 3 解釋: 12 4 4 4. 示例 2: 輸入: n 13 輸出: 2 解釋: 13 4 9. 思路&#xf…

推薦系統(1)-概述

推薦系統概述1.數據部分2.模型部分2.1模型的組成2.2模型的訓練2.3模型評估《深度學習/推薦系統》讀書筆記推薦系統要處理的問題:對于用戶U(user),在特定的場景C(context),針對海量的“物品信息”,構建一個模型f(U,I,C)f(U,I,C)f(U…

(十七)深入淺出TCPIP之UDP打洞原理

專欄其他文章: 理論篇: (一)深入淺出TCPIP之理解TCP報文格式和交互流程 (二)深入淺出TCPIP之再識TCP,理解TCP三次握手(上) (三)深入淺出TCPIP之再識TCP,理解TCP四次揮手(上) (四)深入淺出TCPIP之TCP三次握手和四次揮手(下)的抓包分析 (五)深入淺出TCPIP之TCP流…

leetcode240. 搜索二維矩陣 II

編寫一個高效的算法來搜索 m x n 矩陣 matrix 中的一個目標值 target。該矩陣具有以下特性: 每行的元素從左到右升序排列。 每列的元素從上到下升序排列。 示例: 現有矩陣 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6…

NAT原理

網絡地址轉換(NAT,Network Address Translation)屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術。下面介紹兩類不同方式實現的NAT:NAT(Network Address Translators):稱為基本的NAT在客戶機…

推薦系統(2)-協同過濾1-UserCF、ItemCF

協同過濾1.CF概述2.數據表示3.衡量相似度4.共現矩陣5.UserCF6.ItemCF7.UserCF 與ItemCF 應用場景、主要缺陷8.基于UserCF 電影推薦demo《深度學習/推薦系統》讀書筆記推薦系統的發展一日千里 傳統的推薦模型(2010年前后):協同過濾、羅輯回歸、因子分解、梯度提升樹 …

sql查詢實例1(學生表_課程表_成績表_教師表)

表架構 Student(S#,Sname,Sage,Ssex) 學生表 Course(C#,Cname,T#) 課程表 SC(S#,C#,score) 成績表 Teacher(T#,Tname) 教師表 建表語句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8) ) CREATE TABLE course ( c# INT, cname…

android 存儲方式以及路徑簡介

存儲分成了內部存儲和外部存儲。注意內部存儲又叫做機身內存,而且內存又包含了兩個部分RAM(運行時內存,這個和運行速度有關系,是手機運行時存儲數據和指令的地方)、ROM(這個才算是真正存儲東西的內部存儲范圍,是應用配置和其他數據的地方);而外部存儲就很明確了,用戶的外部掛…

MachineLearning(11)-關聯規則分析

關聯規則分析1.簡單來說-關聯規則2.經典關聯規則挖掘-Apriori1.簡單來說-關聯規則 關聯規則–通過量化的數字描述物品甲的出現 對 物品乙的出現 有多大影響。 最早是為了發現超市銷售數據庫中不同的商品之間的關聯關系:哪組商品可能會在一次購物中同時購買。 廣泛…

APK 安卓反編譯

在學習Android開發的過程你,你往往會去借鑒別人的應用是怎么開發的,那些漂亮的動畫和精致的布局可能會讓你愛不釋手,作為一個開發者,你可能會很想知道這些效果界面是怎么去實現的,這時,你便可以對改應用的A…

sql查詢實例2(借書卡、圖書、借書記錄)

問題描述: 本題用到下面三個關系表: CARD 借書卡。 CNO 卡號,NAME 姓名,CLASS 班級 BOOKS 圖書。 BNO 書號,BNAME 書名,AUTHOR 作者,PRICE 單價,QUANTITY 庫存冊數 BORROW 借書記錄。 CNO 借…

開始學習Unity3D(一)

本人最近轉行開始做海外獨立游戲的發行,主要是負責服務器,開會注意到海外的服務越來越豐富越來越細分,對國內將會造成很大的沖擊,比如AWS,Google,GameSparks等,這導致國內的所謂服務器開發將越來越簡單,國內對服務器開發的需求越來越少,反而客戶端的需求越來越多,所以…

List 流的使用

摘要 本文將介紹在 Java 1.8 中對 List 進行流操作的使用方法。引入的 java.util.stream 包為開發者提供了一種更為便捷和強大的方式來處理集合數據。通過使用流,我們能夠以聲明性的方式進行集合操作,減少了樣板代碼,提高了代碼的可讀性和可…

推薦系統(3)-協同過濾2-矩陣分解算法

協同過濾-矩陣分解算法1.奇異值分解2.梯度下降3.矩陣分解方法的優缺點《深度學習/推薦系統》讀書筆記(其實矩陣分解和協同過濾已經沒有特別大的聯系了) 2006年,在Netfilx舉辦的推薦算法競賽中Netflix Prize Challenge中,以矩陣分解…

leetcode141 環形鏈表

給定一個鏈表,判斷鏈表中是否有環。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 示例 1: 輸入:head …

iPhoneX適配

目錄(?)[-]核心代碼自動化修改代碼參考資料iPhoneX適配,比較搓的一種方式,在不修改分辨率(720 x 1280)的情況下適配iphone X 主屏尺寸: 5.8英寸 主屏分辨率: 2436 x 1125核心代碼修改 工程目錄/Classes/Un…

centos安裝nginx,配置負載均衡

1、安裝nginx安裝教程,參照:http://mp.weixin.qq.com/s/RVaRlRpHqZRjCaXGmOlfKw 2、反向代理的配置修改部署目錄下conf子目錄的nginx.conf文件的內容[html]view plaincopylocation / { #設置主機頭和客戶端真實地…

leetcode142 環形鏈表II

給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有…

PaperNotes(18)-VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized Representation

自動駕駛論文閱讀筆記11. Ployline Garph2. Global Graph3. 模型目標函數4.Related work5.Experiment5.1 實驗設置5.2 消融實驗5.3 模型資源消耗5.4 與其他模型的對比實驗VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized RepresentationVectorNet: 通過矢量化…