Unreal FVariant

최대 1 분 소요

FVariant Struct를 ByteArray로 넘겨 전달 하는 법

struct FParameter
{
public:
	int Arg1;
	int Arg2;
	TSoftObjectPtr<UObject> Object;
public:
	TArray<uint8> AsByteArray()
	{
		TArray<uint8> byteArray;
		FMemoryWriter Ar(byteArray);
		Ar << const_cast<FB2Parameter&>(*this);
		return Ar;
	}

	friend FArchive& operator<<(FArchive& Ar, FB2Parameter& InParam)
	{
		Ar << InParam.Arg1;
		Ar << InParam.Arg2;
		// SoftObject는 path만 메모리에 read&write함.
		if(Ar.IsLoading())
		{
			InParam.Object.ResetWeakPtr();
		} 
		FSoftObjectPath& path = const_cast<FSoftObjectPath&>(InParam.Object.ToSoftObjectPath());
		InParam.Object.SerializePath(Ar);
		return Ar;
	}
}

void main()
{
	FParameter param;
	param.Arg1 = 1;
	param.Arg2 = 2;
	param.Object = NewObject<UObject>();
	// FVariant에 FB2Parameter byte array를 넘긴다.
	FVariant(param.AsByteArray());
}

FVariant ByteArray를 struct 읽기

void ReadFVariant(FVariant InParam)
{
	if (InArg.GetType() == TVariantTraits<TArray<uint8>>::GetType())
	{
		TArray<uint8> byteArray = InArg.GetValue<TArray<uint8>>();

		FMemoryReader Ar(byteArray);
		FParameter param;
		Ar << param;
	}
}

태그:

카테고리:

업데이트: