構造体をシリアライズして送信を行い、受信を行うと文字化けが発生します。
原因がわからず、正しい記述の仕方がわからなかったので投稿します。
.hに以下を宣言
USTRUCT(BlueprintType)
struct FStructData
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY()
FString String0;
UPROPERTY()
FString String1;
FStructData()
{
String0 = "";
String1 = "";
}
bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess)
{
FStructData Data;
Data.String0 = String0;
Data.String1 = String1;
uint8 B = (Data.String0 != "");
Ar.SerializeBits(&B, 16);
if (B) Ar << Data.String0; else Data.String0 = "";
B = (Data.String1 != "");
Ar.SerializeBits(&B, 16);
if (B) Ar << Data.String1; else Data.String1 = "";
if (Ar.IsSaving())
{
return true;
}
else if (Ar.IsLoading())
{
String0 = Data.String0;
String1 = Data.String1;
return true;
}
return false;
}
};
template<>
struct TStructOpsTypeTraits<FStructData> : public TStructOpsTypeTraitsBase2<FStructData>
{
enum
{
WithNetSerializer = true
};
};
UCLASS()
class MY_API AMyActor : public AActor
{
GENERATED_BODY()
■■■■■:
void SetMulticastStructData();
UFUNCTION(NetMulticast, Reliable)
void MulticastStructData(FStructData InStructData);
};
.cppに以下を定義
void AMyActor::SetMulticastStructData()
{
if (Role == ROLE_Authority)
{
FStructData StructData;
StructData.String0 = "abcde";
StructData.String1 = "あいうえお";
MulticastStructData(StructData);
}
}
void AMyActor::MulticastStructData_Implementation(FStructData InStructData)
{
UE_LOG(LogTemp, Log, TEXT("%s %s"), *InStructData.String0, *InStructData.String1);
}
SetMulticastStructData()を実行すると
LogTemp: abcde ???
と表示されます。
お知恵を拝借させてください。