[程式] UE4驗證網路版本的程式碼

看板GameDesign (遊戲設計)作者 (yekdniw)時間7年前 (2018/08/10 21:32), 7年前編輯推噓4(400)
留言4則, 4人參與, 7年前最新討論串1/1
網頁版 https://yekdniwunrealengine.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

08/10 22:17, 7年前 , 1F
08/10 22:17, 1F

08/10 22:26, 7年前 , 2F
讚 經驗分享
08/10 22:26, 2F

08/12 01:51, 7年前 , 3F
推推
08/12 01:51, 3F

01/09 19:59, 7年前 , 4F
推!
01/09 19:59, 4F
文章代碼(AID): #1RRPFjLl (GameDesign)
文章代碼(AID): #1RRPFjLl (GameDesign)