iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
自我挑戰組

多人連線遊戲背後的原理與實作系列 第 9

Day 09 - 製作連線遊戲時會遇到的問題(伺服器協調篇)

  • 分享至 

  • xImage
  •  

在上一天的文章中帶大家認識了客戶端預測的功用及作法,而在使用這項技術時也會遇到協調問題。
由於延遲的問題,我們收到最近一次回傳的封包可能已經是過期很久的封包,那麼如果您拿本地端電腦最新的運算結果,跟最近一次收到的封包去做結果的比對,那兩個封包一比對絕對會不相等,也因此客戶端永遠收到的都是錯誤資訊的封包,那在反覆修正的過程就會出現一些很嚴重的遊戲問題。

伺服器協調(Server reconciliation)

為了解決上述的問題,就會使用到伺服器協調的原理,就是在每個封包添加序列號,以此來避免客戶端拿過期的封包來做資料的比對。

下圖為客戶端預測運作時發生同步問題的概念圖
https://ithelp.ithome.com.tw/upload/images/20220923/20152505H8AWahbohn.png

下方文字為上圖的說明(時間 - 事件)

0ms - 假設玩家按了W,玩家電腦因為客戶端預測往前移動到了(0,0,1),並發送封包到伺服器。
50ms - 玩家此時也按了W,客戶端運算結果為(0,0,2)並往前移動到(0,0,2),同樣也發送封包到伺服器,而此時伺服器也收到了玩家第一個封包,並同時將結果(0,0,1)送回客戶端。
100ms - 玩家收到了第一個封包,比對後發現資料不同,依照客戶端預測的原則,將玩家移回(0,0,1)。
150ms - 玩家收到了第二個封包,比對後結果又不相同,因此玩家又被移回(0,0,2)。


上一篇
Day 08 - 製作連線遊戲時會遇到的問題(客戶端預測篇)
下一篇
Day 10 - 製作連線遊戲時會遇到的問題(實體插值與航位推算篇)
系列文
多人連線遊戲背後的原理與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言