作者yekdniw (yekdniw)
看板GameDesign
标题[程式] UE4验证网路版本的程式码
时间Fri Aug 10 21:32:27 2018
网页版
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://webptt.com/cn.aspx?n=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
1F:推 dreamnook: 08/10 22:17
2F:推 damody: 赞 经验分享 08/10 22:26
3F:推 coolrobin: 推推 08/12 01:51
4F:推 diac3000: 推! 01/09 19:59
※ 编辑: yekdniw (59.120.146.90 台湾), 07/15/2020 11:07:45