1. 구조체 직렬화 - Struct Ops Type Traits

구조체를 직렬화하거나 저장, 복사하기 위해 불리언 변수를 지정해놓은 구조체이다.

여기서 관심있는 것은 WithCopy, WithNetSerializer 이다.

#include "GameplayEffectTypes.h"
#include "AuraAbilityTypes.generated.h"

USTRUCT(BlueprintType)
struct FAuraGameplayEffectContext : public FGameplayEffectContext
{
	GENERATED_BODY()

public:
	// 구조체를 리플렉션 시스템에 사용하기 위해 반드시 오버라이드
	virtual UScriptStruct* GetScriptStruct() const  { return StaticStruct(); }

	// 컨텍스트를 복제
	virtual FAuraGameplayEffectContext* Duplicate() const
	{
		FAuraGameplayEffectContext* NewContext = new FAuraGameplayEffectContext();
		*NewContext = *this;
		if (GetHitResult())
		{
			// HitResult가 존재 -> 깊은 복사 수행
			NewContext->AddHitResult(*GetHitResult(), true);
		}
		return NewContext;
	}

 

헤더 파일에 아래 코드를 작성한다.

template<>
struct TStructOpsTypeTraits<FAuraGameplayEffectContext> : public TStructOpsTypeTraitsBase2< FAuraGameplayEffectContext>
{
	enum
	{
		WithNetSerializer = true,
		WithCopy = true
	};
};

이제 구조체를 직렬화하거나 복제할 수 있게 된다.