NT-2.4|网络优化|结构体
大约 2 分钟
本章概要
以方向为例,优化方向结构体的网络传输
问题
UENUM(BlueprintType)
enum class EDirectionType : uint8
{
Forward UMETA(DisplayName = "Forward"),
Backward UMETA(DisplayName = "Backward"),
Left UMETA(DisplayName = "Left"),
Right UMETA(DisplayName = "Right"),
Invalid UMETA(DisplayName = "Invalid")
};
数据单位
1 Byte = 8 Bits 字节(Byte)和位(Bit)是计算机科学和信息技术中使用的数据单位。它们用于衡量数据的大小和存储容量。
- 000 - 无效
- 001 - 前
- 010 - 后
- 011 - 左
- 100 - 右
- 101 - 其他(如果有的话)
UStruct网络同步
/ 自定义结构用于传递简单的枚举值
USTRUCT(BlueprintType)
struct FGameplayAbilityTargetData_SimpleEnum : public FGameplayAbilityTargetData
{
GENERATED_USTRUCT_BODY()
// 用于存储简单的枚举值 (例如方向类型)
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = Targeting)
uint8 EnumValue;
virtual UScriptStruct* GetScriptStruct() const override{return FGameplayAbilityTargetData_SimpleEnum::StaticStruct();}
virtual FString ToString() const override{return FString::Printf(TEXT("EnumValue: %d"), EnumValue);}
bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess)
{
//Ar << EnumValue; 8位
//5个方向,只需3位
Ar.SerializeBits(&EnumValue,3);
bOutSuccess = true;
return true;
}
};
// 使结构可以通过网络序列化
template<>
struct TStructOpsTypeTraits<FGameplayAbilityTargetData_SimpleEnum> : public TStructOpsTypeTraitsBase2<FGameplayAbilityTargetData_SimpleEnum>
{
enum
{
WithNetSerializer = true,
};
};