Re: [程式] 前、後端物理運算一致性

作者: LayerZ (無法如願)   2021-02-02 01:48:44
推 LayerZ: 認真回一下,基本上是不可能做到前後端同步的,如果做得到 01/31 14:06
→ LayerZ: 就已經突破雲端遊戲瓶頸了 01/31 14:06
→ LayerZ: 一般有兩種做法,一種是控制變數常數,Client端物理表演, 01/31 14:07
→ LayerZ: Server端驗算 (目前常見短連線遊戲),一種是資料Server端 01/31 14:07
→ LayerZ: 為主,Client僅依照Server端送下來的資訊作出表演,如何用 01/31 14:08
→ LayerZ: 這些資訊讓表演逼真是另一個領域了 01/31 14:08
→ LayerZ: (MMO之類) 01/31 14:08
→ LayerZ: 至於你說的作弊,作弊抓的到就好,指要讓他正常遊玩不會出 01/31 14:09
→ LayerZ: 問題就沒關係,至於玩家不管用任何手段作弊,只要server端 01/31 14:10
→ LayerZ: 抓得出來(各種驗算) 就能即時處理掉 01/31 14:10
>>請問你說的變數常數主要是控制哪些部分?(是指物理參數嗎?)
>>目前想到的方法好像是比較偏向你說的方法2
>>我打算在Client跟Server都用Box2D去創建一個遊戲世界(world)
>>並且讓Client跟Server端的world盡可能保持在一致的狀態
>>當玩家進行遊戲操作後
>>Client會將該操作的RPC封包送至後端
>>後端接收封包後後產生結果(使用物理引擎計算路徑並且包含亂數因素)並回傳前端作演示
>>但這樣似乎有可能會碰到浮點數精準的問題(?)
基本上不會在後端用物理引擎的..
假如有同時10000人遊玩,那麼你的後端就要同時模擬10000場遊戲,很明顯是不切實際的
>>另外場面上如果有移動性的Body
>>似乎也會導致無法單靠物理參數就導出同樣的結果
>>
移動性? 從什麼時候開始移動,從哪裡開始,方向往哪裡,什麼時候轉彎
甚至隨機移動的種子是多少,都是可以固定下來的常數
舉個例子,高爾夫球遊戲,理論上只要角度跟力道兩個變數不變,打出去的結果就要是
固定的,而玩家怎麼打就是這遊戲的變數 (量角器拿出來
因此理論上,控制好常數與變數,就能知道結果,甚至將結果記錄下來,後來的用查表法
直接給你答案
___
不過上面是理論上的東西,實務上,後端真的需要知道精確的結果嗎,驗證的時候也不用
到100%精確,只要能確定是否合法就好
假設有個遊戲
分數落在 0~100分之間,突然來個10000分的肯定有問題 (異常封包)
平均分數60~80,突然有玩家拿個100分再來查也沒關係,甚至不需要去查
為什麼? 你要去靠動作查玩家怎麼達到的,那玩家直接作弊做出能達到的動作,你在後端
就查不到任何東西 (詳見FPS外掛戰爭,可以另開一個專題了XDD)
作者: LayerZ (無法如願)   2020-01-31 14:06:00
認真回一下,基本上是不可能做到前後端同步的,如果做得到就已經突破雲端遊戲瓶頸了一般有兩種做法,一種是控制變數常數,Client端物理表演,Server端驗算 (目前常見短連線遊戲),一種是資料Server端為主,Client僅依照Server端送下來的資訊作出表演,如何用這些資訊讓表演逼真是另一個領域了(MMO之類)至於你說的作弊,作弊抓的到就好,指要讓他正常遊玩不會出問題就沒關係,至於玩家不管用任何手段作弊,只要server端抓得出來(各種驗算) 就能即時處理掉
作者: v86861062 (數字人:3)   2021-02-02 12:17:00
:D
作者: SecondRun (雨夜琴聲)   2021-02-05 00:59:00
我也在想多幾個玩家他server就要死了吧XD

Links booklink

Contact Us: admin [ a t ] ucptt.com