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