《魂斗罗:归来》手游子弹中没中,没你想得那么简单!
無數玩家童年的神作重新回歸,手機端多人聯機,呼朋引伴一起重溫當年的熱血大作。
除了IP,劇情,對工程師而言,《魂斗羅:歸來》更要解決的聯機同步和命中同步等問題,簡單說,一顆子彈打沒打中,沒你想得那么簡單!
?
客戶端高級工程師聶鵬和田亞濤本周在《論道》開聊,小小子彈命中的大問題!
移動同步
最左邊是1P玩家的持續,中間是DS,右邊是3P玩家。玩家走路,會有一個MoveStep,MoveStep里包括了各種移動計算,操作以后它會把移動的包,即SendMove發到服務器,服務器會根據這個包進行MoveStep。
計算之后,根據當前服務器計算的結果和客戶端上報的結果,進行對比,即CheckCheat,看位置有沒有差異,客戶端有沒有作弊。如果有作弊,客戶端會向iP玩家發送一個AdjustOwner,進行校正,校正可能會導致1P玩家有拉扯。
?
瞬發型同步模型和投射類同步模型
?
瞬發型同步模型中,需要達到的目標是本地預表現,QQ號購買響應及時,體驗順暢。核心點是命中校驗和反外掛。
1P玩家發送射擊開始和結束事件,過程由DS計算并同步給3P玩家表現。本地檢測命中后預表現命中效果,需發送當前時刻的狀態序號給DS做命中判定。DS收到后回滾角色發射時刻信息,校驗彈量、射程、方向、位置、阻擋等信息。驗證通過,執行傷害并同步給所有客戶端。
這是本地發射開火,但并不會真的發射子彈出來,服務器開始創建子彈,同時給兩端玩家進行。假設他們一起開始,傷害是在DS進行的,本地只是預表現,不做檢測。目標是犧牲局部實時性,與3P保持彈道一致,公平性優先。核心點是延遲補償,平滑差值。
外網偶爾會反饋一些問題,比如命中無效、擊穿問題、彈量閃跳,這些都是非常影響體驗的。
命中無效就是打著沒傷害,第二就是會穿人,子彈會穿過去,還有就是在設計的時候,按著開槍的時候,彈量會閃跳。
命中無效:回滾250毫秒歷史事件
?
在C/S架構中,DS收到的目標是一個RTT前,敵人所在的位置,當你扣下扳機時他已經跑了。這個大部分原因是網絡延遲。
目前的解決方案是,回滾250ms的歷史事件,回滾到這個點,沒有取到信息,之前是會判定命中無效。如果大于250ms,還會增加一個檢查,看你是不是還在這個位置。如果你沒動,對方沒動或動了但在250ms之內,還是會產生傷害,只是傷害會產生延遲。
總結
以上是生活随笔為你收集整理的《魂斗罗:归来》手游子弹中没中,没你想得那么简单!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为游戏开发者总结的20个 Unity 建
- 下一篇: 巨人网络李东旭:关于提高游戏流畅性的那些