NoBodyNoOne

白驹过隙

UE本身有一套自创的网络框架, 在这个框架里UObject类型默认是无法进行属性同步的. 如果想要UObject进行属性同步就必须进行一系列重写.

阅读全文 »

网络相关日志

开启网络相关日志:

1
2
3
4
log LogNetTraffic log
log LogNetPackageMap log

log LogNetTraffic log|log LogNetPackageMap log|log LogNetPartialBunch log|log LogNet Verbose|log LogRep log|log LogNetPlayerMovement log|log LogRepTraffic log|log LogNetDormancy log|log LogNetFastTArray log|log LogSecurity log|log LogRepProperties VeryVerbose|log LogRepPropertiesBackCompat VeryVerbose

关闭网络相关日志:

1
2
log LogNetTraffic off
log LogNetPackageMap off

开启DS端络相关日志:

1
2
ServerExec log LogNetTraffic log
ServerExec log LogNetPackageMap log
阅读全文 »

背景

UE中加载机制是, 加载会有一个队列, 一个同步加载会flush掉前面所有的异步加载, 进而造成卡顿. 例如: 当前存在异步加载A和B, 此时我调用同步加载C, 会立即将A和B flush掉, 然后执行C.

UE NetAsyncLoad大致流程:

在TickDispatch(收包)阶段, 针对所有ExportNetGUID(这里就指其所对应的UObject, 下同)进行异步加载, 并将其填入PendingGuidResolves中. 在接收Bunch中, 如果需要等待GUID加载或者QueuedBunch还没处理完, 就将该Bunch添加到QueueBunch中.

在TickFlush(发包)阶段, 解析GUID, 如果PendingGuidResolves为空, 并且其他条件也满足了, 就会处理QueueBunches.

可以看到上述流程中, 如果PendingGUID都已经被解析了, 那么走的流程和正规流程没什么区别. 如果存在没有被解析的PendingGUID, 则会将Bunch放入QueuedBunches中.

阅读全文 »

Actor开启Replicate

UE中, 对于需要ReplicateActor, 需要将AActor.bReplicates设置为true.

阅读全文 »

关键变量

FRepChangedPropertyTracker

FRepChangedPropertyTracker存储着一帧对应Object Parent Properties是否Dirty. 每个Object只有一份FRepChangedPropertyTracker, 所有Connection共享, 它标志着该Object内Parent层级的属性是否Dirty, 并存储在UNetDriver.RepChangedPropertyTrackerMap中(关键函数UNetDriver::FindOrCreateRepChangedPropertyTracker). 并且FRepChangedPropertyTracker.Parents初始化时候默认为1, 即Dirty. 而且不会自动清理, 即如果使用就要自己维护.

阅读全文 »

动态压缩Vector

根据FVector三个分量的最大值, 压缩Vector, 节省带宽. 这里还要注意一点, 当数值比较大时, 可能压缩后比压缩前占用的bit数量还要大, 即更占用带宽.

阅读全文 »

网络相关配置

UNetDriver.InitialConnectTimeout

1
2
3
/** Amount of time to wait for a new net connection to be established before destroying the connection */
// 建立连接的超时时间
float InitialConnectTimeout;
阅读全文 »

概述

ReplicateActor分成三步: SerializeNewActor+序列化属性+序列化删除的Objs.

其中序列化属性中的属性又分成三类: Actor自身属性+ActorComponent属性+SubObject属性. 每类属性的序列化都会调用同一个函数: FObjectReplicator::ReplicateProperties.

阅读全文 »

BunchArchetype