If you want to reduce your bandwidth overhead even more you could do something like what I do in my VR plugin, I call get/set in the rep notify and prior to the rpc however it could be done in the bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess) function instead to make it invisible to the end user.
USTRUCT()
struct VREXPANSIONPLUGIN_API FBPVRComponentPosRep
{
GENERATED_BODY()
public:
UPROPERTY()
FVector_NetQuantize100 Position;
UPROPERTY()
uint32 YawPitchINT;
UPROPERTY()
uint8 RollBYTE;
FORCEINLINE void SetRotation(FRotator NewRot)
{
YawPitchINT = (FRotator::CompressAxisToShort(NewRot.Yaw) << 16) | FRotator::CompressAxisToShort(NewRot.Pitch);
RollBYTE = FRotator::CompressAxisToByte(NewRot.Roll);
}
FORCEINLINE FRotator GetRotation()
{
const uint16 nPitch = (YawPitchINT & 65535);
const uint16 nYaw = (YawPitchINT >> 16);
return FRotator(FRotator::DecompressAxisFromShort(nPitch), FRotator::DecompressAxisFromShort(nYaw), FRotator::DecompressAxisFromByte(RollBYTE));
}
};