→ dklassic: 最簡單的方法就是你自己推算玩家的施力跟方向去算出移 01/28 17:26
→ dklassic: 動路徑與碰撞結果吧,而不是真的靠物理模擬去做 01/28 17:26
推 wulouise: 你可以前端先算畫面,最後後端再更新,不然一定慢 01/28 18:38
→ wulouise: 大部分網路遊戲的前端都有偷算,跟後段比差很多再拉會 01/28 18:39
你說的方法不知道是否是所謂的Client side prediction?
目前碰到的難題是
前端演示的畫面顯示該路徑是會得到獎勵的
但實際上跟後端的計算是有誤差的(後端的路徑並無實際碰到獎勵範圍)
如果最後前端依據後端(權威性)結果去做畫面修正
深怕玩家會來吵糖吃
推 ddavid: 網路遊戲常見的延遲造成瞬移就是這種前端預測跟後端實算有 01/29 10:39
→ ddavid: 差異造成的結果,這幾乎是必備技術了 01/29 10:40
你提及網路延遲的部分不知道跟我下面理解的是否一樣?
大部分即時的遊戲都會偵測延遲的狀況
並依照延遲的形況去做畫面修正
如果只是輕微延遲可能會利用補間的方式去修正
但是當延遲過大的時候則是將畫面停滯並且做大幅度的一次性修正
推 LayerZ: 唯一的變數只有玩家的角度與力道,其他所有都是常數 01/29 22:35
→ LayerZ: 不要太依賴物理特性了,物理特性應該是做出來的表現效果 01/29 22:36
→ LayerZ: 去依靠Unity的物理引擎來做出本來該自己做的其實是邪道.. 01/29 22:37
推 LayerZ: 結果跟原文完全沒關係抱歉Orz... 01/29 22:47
→ dklassic: 啊我理解錯,我在幹嘛 XD 01/30 02:24
→ dklassic: 前端先模擬是滿正常的作法,這邊效能跟作弊是一體兩面 01/30 02:24
→ dklassic: 的難題就只能看取捨了 01/30 02:24
是說通常效能跟作弊一定要有所取捨嗎?
因為主要感興趣的部分是後端層面
所以對玩家作弊的部分會比較想要理解怎樣處理
推 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封包送至後端
後端接收封包後後產生結果(使用物理引擎計算路徑並且包含亂數因素)並回傳前端作演示
但這樣似乎有可能會碰到浮點數精準的問題(?)
另外場面上如果有移動性的Body
似乎也會導致無法單靠物理參數就導出同樣的結果
另外想詢問如果要防止作弊的方法
有哪些常見的方式嗎?
謝謝
※ 編輯: bearnone (220.134.195.1 臺灣), 02/01/2021 14:43:51