UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PackageMapClient.h File Reference
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/UObjectGlobals.h"
#include "Misc/NetworkGuid.h"
#include "Misc/NetworkVersion.h"
#include "UObject/CoreNet.h"
#include "Net/Core/NetToken/NetToken.h"
#include "Net/DataBunch.h"
#include "Net/NetAnalyticsTypes.h"
#include "ProfilingDebugging/CsvProfiler.h"
#include "HAL/LowLevelMemTracker.h"
#include "PackageMapClient.generated.h"

Go to the source code of this file.

Classes

class  FNetFieldExport
 
class  FNetFieldExportGroup
 
class  FNetGuidCacheObject
 
struct  FQueuedBunchObjectReference
 
class  FNetGUIDCache
 
class  FPackageMapAckState
 
class  UPackageMapClient
 

Namespaces

namespace  UE
 
namespace  UE::Net
 
namespace  UE::Net::Private
 

Enumerations

enum class  EAppendNetExportFlags : uint32 { None = 0 , ForceExportDirtyGroups = (1 << 0) }
 

Functions

 LLM_DECLARE_TAG_API (GuidCache, ENGINE_API)
 
 ENUM_CLASS_FLAGS (EAppendNetExportFlags)
 

Enumeration Type Documentation

◆ EAppendNetExportFlags

Enumerator
None 
ForceExportDirtyGroups 

Function Documentation

◆ ENUM_CLASS_FLAGS()

ENUM_CLASS_FLAGS ( EAppendNetExportFlags  )

◆ LLM_DECLARE_TAG_API()

LLM_DECLARE_TAG_API ( GuidCache  ,
ENGINE_API   
)

PackageMap implementation that is client/connection specific. This subclass implements all NetGUID Acking and interactions with a UConnection. On the server, each client will have their own instance of UPackageMapClient.

UObjects are first serialized as <NetGUID, Name/Path> pairs. UPackageMapClient tracks each NetGUID's usage and knows when a NetGUID has been ACKd. Once ACK'd, objects are just serialized as <NetGUID>. The result is higher bandwidth usage upfront for new clients, but minimal bandwidth once things gets going.

A further optimization is enabled by default. References will actually be serialized via: <NetGUID, <(Outer *), Object Name> >. Where Outer * is a reference to the UObject's Outer.

The main advantages from this are: -Flexibility. No precomputed net indices or large package lists need to be exchanged for UObject serialization. -Cross version communication. The name is all that is needed to exchange references. -Efficiency in that a very small % of UObjects will ever be serialized. Only Objects that serialized are assigned NetGUIDs.