[程式] UE4验证网络版本的程式码

楼主: yekdniw (yekdniw)   2018-08-10 21:32:27
网页版
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比较不容易出这个状况。
作者: damody (天亮damody)   2018-08-10 22:26:00
赞 经验分享
作者: coolrobin (泳圈)   2018-08-12 01:51:00
推推
作者: diac3000 (diac)   2017-01-09 19:59:00
推!

Links booklink

Contact Us: admin [ a t ] ucptt.com