UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CharacterMovementReplication.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "UObject/Object.h"
13
14#include "CharacterMovementReplication.generated.h"
15
16class UPackageMap;
20
21// If defined and not zero, deprecated RPCs on UCharacterMovementComponent will not be marked deprecated at compile time, to aid in migration of older projects. New projects should prefer the new API.
22#ifndef SUPPORT_DEPRECATED_CHARACTER_MOVEMENT_RPCS
23#define SUPPORT_DEPRECATED_CHARACTER_MOVEMENT_RPCS 0
24#endif
25
26#if SUPPORT_DEPRECATED_CHARACTER_MOVEMENT_RPCS
27#define DEPRECATED_CHARACTER_MOVEMENT_RPC(...)
28#else
29#define DEPRECATED_CHARACTER_MOVEMENT_RPC(DeprecatedFunction, NewFunction) UE_DEPRECATED_FORGAME(4.26, #DeprecatedFunction "() is deprecated, use " #NewFunction "() instead, or define SUPPORT_DEPRECATED_CHARACTER_MOVEMENT_RPCS=1 in the project and set CVar p.NetUsePackedMovementRPCs=0 to use the old code path.")
30#endif
31
32// Number of bits to reserve in serialization container. Make this large enough to try to avoid re-allocation during the worst case RPC calls (dual move + unacknowledged "old important" move).
33#ifndef CHARACTER_SERIALIZATION_PACKEDBITS_RESERVED_SIZE
34#define CHARACTER_SERIALIZATION_PACKEDBITS_RESERVED_SIZE 1024
35#endif
36
38
42USTRUCT()
44{
46
48 : SavedPackageMap(nullptr)
49 {
50 }
51
52 ENGINE_API bool NetSerialize(FArchive& Ar, UPackageMap* PackageMap, bool& bOutSuccess);
53 UPackageMap* GetPackageMap() const { return SavedPackageMap; }
54
55 //------------------------------------------------------------------------
56 // Data
57
58 // TInlineAllocator used with TBitArray takes the number of 32-bit dwords, but the define is in number of bits, so convert here by dividing by 32.
60
61 // Since this struct uses custom serialization path we need to explicitly capture exports in order to forward them to iris
62 // This is managed by the use of a custom packagemap.
64
65 // Since we capturing data outside of the normal serialization path we also need to store exports to inject when actually sending the data.
67
68private:
69 UPackageMap* SavedPackageMap;
70};
71
72template<>
73struct TStructOpsTypeTraits<FCharacterNetworkSerializationPackedBits> : public TStructOpsTypeTraitsBase2<FCharacterNetworkSerializationPackedBits>
74{
75 enum
76 {
78 };
79};
80
81
83// Client to Server movement data
85
96{
97public:
98
100 {
101 NewMove,
103 OldMove
104 };
105
118
120 {
121 }
122
129
135 ENGINE_API virtual bool Serialize(UCharacterMovementComponent& CharacterMovement, FArchive& Ar, UPackageMap* PackageMap, ENetworkMoveType MoveType);
136
137 // Indicates whether this was the latest new move, a pending/dual move, or old important move.
139
140 //------------------------------------------------------------------------
141 // Basic movement data.
142
145 FVector_NetQuantize100 Location; // Either world location or relative to MovementBase if that is set.
148
150 class UPrimitiveComponent* MovementBase;
152};
153
154
156
166{
167public:
168
177 {
178 NewMoveData = &BaseDefaultMoveData[0];
179 PendingMoveData = &BaseDefaultMoveData[1];
180 OldMoveData = &BaseDefaultMoveData[2];
181 }
182
186
191
195 ENGINE_API virtual bool Serialize(UCharacterMovementComponent& CharacterMovement, FArchive& Ar, UPackageMap* PackageMap);
196
197 //------------------------------------------------------------------------
198 // Basic movement data. NewMoveData is the most recent move, PendingMoveData is a move right before it (dual move). OldMoveData is an "important" move not yet acknowledged.
199
203
204 //------------------------------------------------------------------------
205 // Optional pending data used in "dual moves".
208
209 // Optional "old move" data, for redundant important old moves not yet ack'd.
211
212 // True if we want to disable a scoped move around both dual moves (optional from bEnableServerDualMoveScopedMovementUpdates), typically set if bForceNoCombine was true which can indicate an important change in moves.
214
215protected:
216
218 FCharacterNetworkMoveData* PendingMoveData; // Only valid if bHasPendingMove is true
219 FCharacterNetworkMoveData* OldMoveData; // Only valid if bHasOldMove is true
220
221private:
222
223 FCharacterNetworkMoveData BaseDefaultMoveData[3];
224};
225
226
228
231USTRUCT()
237
238template<>
240{
241 enum
242 {
244 };
245};
246
247
249// Server to Client response
251
252// ClientAdjustPosition replication (event called at end of frame by server)
254{
255public:
256
272
275 FVector NewLoc; // Note: if bBaseRelativePosition is set, this is a relative location to the Movement base.
276 FVector NewVel; // Note: if bBaseRelativeVelocity is set, this is a relative velocity to the Movement base.
279
280#if UE_WITH_REMOTE_OBJECT_HANDLE
282#else
283 UPrimitiveComponent* NewBase;
284#endif
290
291 void Serialize(FArchive& Archive)
292 {
293 if (Archive.IsMigratingRemoteObjects())
294 {
295 Archive << TimeStamp;
296 Archive << DeltaTime;
297 Archive << NewLoc;
298 Archive << NewVel;
299 Archive << NewRot;
300 Archive << GravityDirection;
301 Archive << NewBase;
302 Archive << NewBaseBoneName;
303 Archive.SerializeBits(&bAckGoodMove, 1);
306 Archive << MovementMode;
307 }
308 }
309};
310
311
313
320{
321public:
322
332
336
340 ENGINE_API virtual void ServerFillResponseData(const UCharacterMovementComponent& CharacterMovement, const FClientAdjustment& PendingAdjustment);
341
345 ENGINE_API virtual bool Serialize(UCharacterMovementComponent& CharacterMovement, FArchive& Ar, UPackageMap* PackageMap);
346
348 bool IsCorrection() const { return !IsGoodMove(); }
349
351
353 bool bHasRotation; // By default ClientAdjustment.NewRot is not serialized. Set this to true after base ServerFillResponseData if you want Rotation to be serialized.
356
357 // Client adjustment. All data other than bAckGoodMove and TimeStamp is only valid if this is a correction (not an ack).
359
362};
363
365
368USTRUCT()
374
375template<>
377{
378 enum
379 {
381 };
382};
#define NULL
Definition oodle2base.h:134
#define CHARACTER_SERIALIZATION_PACKEDBITS_RESERVED_SIZE
Definition CharacterMovementReplication.h:34
#define NumBitsPerDWORD
Definition ContainerAllocationPolicies.h:1371
@ ForceInitToZero
Definition CoreMiscDefines.h:156
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
UE_FORCEINLINE_HINT constexpr bool IsMigratingRemoteObjects() const
Definition Archive.h:355
virtual void SerializeBits(void *V, int64 LengthBits)
Definition Archive.h:1707
Definition NameTypes.h:617
Definition CharacterMovementComponent.h:2913
Definition BitArray.h:350
Definition ContainerAllocationPolicies.h:894
Definition CharacterMovementComponent.h:136
Definition CoreNet.h:191
@ false
Definition radaudio_common.h:23
Definition CharacterMovementReplication.h:320
virtual ENGINE_API void ServerFillResponseData(const UCharacterMovementComponent &CharacterMovement, const FClientAdjustment &PendingAdjustment)
Definition CharacterMovementComponent.cpp:10722
FCharacterMoveResponseDataContainer()
Definition CharacterMovementReplication.h:323
virtual ~FCharacterMoveResponseDataContainer()
Definition CharacterMovementReplication.h:333
bool bRootMotionSourceCorrection
Definition CharacterMovementReplication.h:355
ENGINE_API FRootMotionSourceGroup * GetRootMotionSourceGroup(UCharacterMovementComponent &CharacterMovement) const
Definition CharacterMovementComponent.cpp:10877
bool IsGoodMove() const
Definition CharacterMovementReplication.h:347
float RootMotionTrackPosition
Definition CharacterMovementReplication.h:360
FClientAdjustment ClientAdjustment
Definition CharacterMovementReplication.h:358
bool IsCorrection() const
Definition CharacterMovementReplication.h:348
bool bRootMotionMontageCorrection
Definition CharacterMovementReplication.h:354
FVector_NetQuantizeNormal RootMotionRotation
Definition CharacterMovementReplication.h:361
bool bHasBase
Definition CharacterMovementReplication.h:352
bool bHasRotation
Definition CharacterMovementReplication.h:353
Definition CharacterMovementReplication.h:370
Definition CharacterMovementReplication.h:166
virtual ~FCharacterNetworkMoveDataContainer()
Definition CharacterMovementReplication.h:183
bool bHasOldMove
Definition CharacterMovementReplication.h:210
FCharacterNetworkMoveData * PendingMoveData
Definition CharacterMovementReplication.h:218
FCharacterNetworkMoveData * OldMoveData
Definition CharacterMovementReplication.h:219
FCharacterNetworkMoveData * NewMoveData
Definition CharacterMovementReplication.h:217
bool bIsDualHybridRootMotionMove
Definition CharacterMovementReplication.h:207
virtual ENGINE_API void ClientFillNetworkMoveData(const FSavedMove_Character *ClientNewMove, const FSavedMove_Character *ClientPendingMove, const FSavedMove_Character *ClientOldMove)
Definition CharacterMovementComponent.cpp:9609
bool bDisableCombinedScopedMove
Definition CharacterMovementReplication.h:213
bool bHasPendingMove
Definition CharacterMovementReplication.h:206
FCharacterNetworkMoveData * GetPendingMoveData() const
Definition CharacterMovementReplication.h:201
FCharacterNetworkMoveData * GetNewMoveData() const
Definition CharacterMovementReplication.h:200
FCharacterNetworkMoveDataContainer()
Definition CharacterMovementReplication.h:172
FCharacterNetworkMoveData * GetOldMoveData() const
Definition CharacterMovementReplication.h:202
Definition CharacterMovementReplication.h:96
FVector_NetQuantize100 Location
Definition CharacterMovementReplication.h:145
class UPrimitiveComponent * MovementBase
Definition CharacterMovementReplication.h:150
virtual ~FCharacterNetworkMoveData()
Definition CharacterMovementReplication.h:119
float TimeStamp
Definition CharacterMovementReplication.h:143
ENetworkMoveType
Definition CharacterMovementReplication.h:100
FRotator ControlRotation
Definition CharacterMovementReplication.h:146
uint8 CompressedMoveFlags
Definition CharacterMovementReplication.h:147
FName MovementBaseBoneName
Definition CharacterMovementReplication.h:151
FCharacterNetworkMoveData()
Definition CharacterMovementReplication.h:106
uint8 MovementMode
Definition CharacterMovementReplication.h:149
FVector_NetQuantize10 Acceleration
Definition CharacterMovementReplication.h:144
ENetworkMoveType NetworkMoveType
Definition CharacterMovementReplication.h:138
virtual ENGINE_API void ClientFillNetworkMoveData(const FSavedMove_Character &ClientMove, ENetworkMoveType MoveType)
Definition CharacterMovementComponent.cpp:9677
Definition CharacterMovementReplication.h:44
UPackageMap * GetPackageMap() const
Definition CharacterMovementReplication.h:53
UE::Net::FNetTokenExportContext::FNetTokenExports NetTokensPendingExport
Definition CharacterMovementReplication.h:66
TBitArray< TInlineAllocator< CHARACTER_SERIALIZATION_PACKEDBITS_RESERVED_SIZE/NumBitsPerDWORD > > DataBits
Definition CharacterMovementReplication.h:59
UE::Net::FIrisPackageMapExports PackageMapExports
Definition CharacterMovementReplication.h:63
Definition CharacterMovementReplication.h:233
Definition CharacterMovementReplication.h:254
float TimeStamp
Definition CharacterMovementReplication.h:273
FVector NewLoc
Definition CharacterMovementReplication.h:275
uint8 MovementMode
Definition CharacterMovementReplication.h:289
void Serialize(FArchive &Archive)
Definition CharacterMovementReplication.h:291
bool bAckGoodMove
Definition CharacterMovementReplication.h:286
UPrimitiveComponent * NewBase
Definition CharacterMovementReplication.h:283
FClientAdjustment()
Definition CharacterMovementReplication.h:257
bool bBaseRelativePosition
Definition CharacterMovementReplication.h:287
bool bBaseRelativeVelocity
Definition CharacterMovementReplication.h:288
FVector NewVel
Definition CharacterMovementReplication.h:276
FName NewBaseBoneName
Definition CharacterMovementReplication.h:285
FVector GravityDirection
Definition CharacterMovementReplication.h:278
FRotator NewRot
Definition CharacterMovementReplication.h:277
float DeltaTime
Definition CharacterMovementReplication.h:274
Definition RootMotionSource.h:753
ENGINE_API bool NetSerialize(FArchive &Ar, class UPackageMap *Map, bool &bOutSuccess, uint8 MaxNumRootMotionSourcesToSerialize=MAX_uint8)
Definition RootMotionSource.cpp:2115
Definition NetSerialization.h:500
Definition NetSerialization.h:455
Definition NetSerialization.h:541
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
@ WithNetSerializer
Definition StructOpsTypeTraits.h:26
Definition StructOpsTypeTraits.h:46
Definition IrisObjectReferencePackageMap.h:21