GameDesign 板


LINE

最近嘗試使用Box2D做為物理引擎來模擬與製作遊戲(想要模仿怪物彈珠) 但遇到了前、後端同步的問題 為了避免前端直接傳送封包作弊 希望亂數與物理參數(速度、反作用力等)都是由後端產生 最後由前端直接帶入後端產生的參數並驅動Body產生結果 在物理引擎上前、後端皆使用fixed timestamp的方法去運行 狀況1: 場面上除了玩家操控的Body外 其他物件都是不會移動的(僅會產生物理碰撞) 玩家的操作會有隨機性並產生物理參數讓前端使用 一開始有使用CCD但在某些狀況下會導致前、後端的位置不一樣 後來去看了核心才發現主要原因是CCD所造成的 也因為遊戲世界中並沒有會高速移動的Body 所以就先將CCD的機制關閉 關閉後似乎就沒有再出現運算結果不一致的狀況 請問有辦法在開啟CCD的情況下也保持物理運算結果是一樣的嗎? 狀況2: 承上述的狀況1 但遊戲世界中增加了一些會自體來回移動的Body並影響玩家的操作結果 請問要如何讓前端只使用物理參數下可以達到運算結果一致? 以下提供我想到的解法 把後端在物理運算中每一個tick的結果保存下來傳送給前端演示 但這種做法會導致封包流量過大 以一秒鐘固定跑60個tick的狀況下 每一次動作可能產生5 ~ 6KB的流量 雖然可以讓前端完美重現但流量應該會爆炸 而且上面的做法假設碰到狀況2就完全無法適用 中間也有參考一些別人的遊戲 但有些遊戲似乎是讓前端去跑結果並且告知後端 請問這樣做不會容易發生作弊的狀況嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.195.1 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1611808631.A.ABD.html ※ 編輯: bearnone (220.134.195.1 臺灣), 01/28/2021 13:05:50
1F:→ dklassic: 最簡單的方法就是你自己推算玩家的施力跟方向去算出移 01/28 17:26
2F:→ dklassic: 動路徑與碰撞結果吧,而不是真的靠物理模擬去做 01/28 17:26
3F:推 wulouise: 你可以前端先算畫面,最後後端再更新,不然一定慢 01/28 18:38
4F:→ wulouise: 大部分網路遊戲的前端都有偷算,跟後段比差很多再拉會 01/28 18:39
你說的方法不知道是否是所謂的Client side prediction? 目前碰到的難題是 前端演示的畫面顯示該路徑是會得到獎勵的 但實際上跟後端的計算是有誤差的(後端的路徑並無實際碰到獎勵範圍) 如果最後前端依據後端(權威性)結果去做畫面修正 深怕玩家會來吵糖吃
5F:推 ddavid: 網路遊戲常見的延遲造成瞬移就是這種前端預測跟後端實算有 01/29 10:39
6F:→ ddavid: 差異造成的結果,這幾乎是必備技術了 01/29 10:40
你提及網路延遲的部分不知道跟我下面理解的是否一樣? 大部分即時的遊戲都會偵測延遲的狀況 並依照延遲的形況去做畫面修正 如果只是輕微延遲可能會利用補間的方式去修正 但是當延遲過大的時候則是將畫面停滯並且做大幅度的一次性修正
7F:推 LayerZ: 唯一的變數只有玩家的角度與力道,其他所有都是常數 01/29 22:35
8F:→ LayerZ: 不要太依賴物理特性了,物理特性應該是做出來的表現效果 01/29 22:36
9F:→ LayerZ: 去依靠Unity的物理引擎來做出本來該自己做的其實是邪道.. 01/29 22:37
10F:推 LayerZ: 結果跟原文完全沒關係抱歉Orz... 01/29 22:47
11F:→ dklassic: 啊我理解錯,我在幹嘛 XD 01/30 02:24
12F:→ dklassic: 前端先模擬是滿正常的作法,這邊效能跟作弊是一體兩面 01/30 02:24
13F:→ dklassic: 的難題就只能看取捨了 01/30 02:24
是說通常效能跟作弊一定要有所取捨嗎? 因為主要感興趣的部分是後端層面 所以對玩家作弊的部分會比較想要理解怎樣處理
14F:推 LayerZ: 認真回一下,基本上是不可能做到前後端同步的,如果做得到 01/31 14:06
15F:→ LayerZ: 就已經突破雲端遊戲瓶頸了 01/31 14:06
16F:→ LayerZ: 一般有兩種做法,一種是控制變數常數,Client端物理表演, 01/31 14:07
17F:→ LayerZ: Server端驗算 (目前常見短連線遊戲),一種是資料Server端 01/31 14:07
18F:→ LayerZ: 為主,Client僅依照Server端送下來的資訊作出表演,如何用 01/31 14:08
19F:→ LayerZ: 這些資訊讓表演逼真是另一個領域了 01/31 14:08
20F:→ LayerZ: (MMO之類) 01/31 14:08
21F:→ LayerZ: 至於你說的作弊,作弊抓的到就好,指要讓他正常遊玩不會出 01/31 14:09
22F:→ LayerZ: 問題就沒關係,至於玩家不管用任何手段作弊,只要server端 01/31 14:10
23F:→ 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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP