看板 GameDesign 關於我們 聯絡資訊
網頁版 https://yekdniwue.blogspot.com/2018/08/ue4.html 在開發多人遊戲的時候總是會遇到client沒辦法連上server的情況。 例如有人沒有更新,或是開錯目錄的執行檔等等。 這篇文章稍微提一下UE4如何驗證不同版本的機制以及程式碼在哪邊處理這些事情, 以及如何從log判斷是不是版本有問題。 首先EngineBaseTypes.h 有個ENetworkFailure::NetChecksumMismatch的enum 定義。 而PackageMapClient.cpp 有一些程式碼會檢查讀取物件的NetworkChecksum, 如果判斷不對就會送出NetChecksumMismatch事件。 client會因為上面原因,造成spawn actor失敗, 接著就會送NMT_ActorChannelFailure給server, 此時server就會關掉對這個玩家的連線。 送NMT_ActorChannelFailure的程式碼在 DataChannel.cpp 從client會看到的log: LogNetPackageMap: Warning: GetObjectFromNetGUID: Network checksum mismatch. FullNetGUIDPath: [57]/Game/xxxxx.[55]xxxxx.[53]PersistentLevel.[131]xxxxx, 2365598466, 229775609 LogNet: Warning: UActorChannel::ProcessBunch: SerializeNewActor failed to find/spawn actor. Actor: None, Channel: 30 (LogNet可能預設不會輸出訊息,可能要透過修改參數或是用console command 輸入Log LogNet All來看) server會看到的log: Server connection received: ActorChannelFailure 所以server 或是client看到上述的訊息的話,就可以知道可能兩邊版本有問題,總之還 是記得client跟server都要用相同的build比較不容易出這個狀況。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.23.76 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1533907949.A.56F.html ※ 編輯: yekdniw (1.169.23.76), 08/10/2018 21:33:53 ※ 編輯: yekdniw (1.169.23.76), 08/10/2018 21:34:10
dreamnook: 08/10 22:17
damody: 讚 經驗分享 08/10 22:26
coolrobin: 推推 08/12 01:51
diac3000: 推! 01/09 19:59
※ 編輯: yekdniw (59.120.146.90 臺灣), 07/15/2020 11:07:45