언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

데미지 처리 심화 - 2) NetSerialize 함수 오버라이드 & 사용자 정의 GEContext에 대한 복사 연산 허용

monstro 2025. 9. 12. 17:44
728x90
반응형

- 개요

NetSerialize 함수에서 사용하는 인자 중에서 FArchive는 데이터를 세이브 / 로딩 / 보관하는 역할을 수행한다

이때 세이브 / 로딩하기 위해 데이터를 직렬화 / 역직렬화하는 로직이 필요하다

uint32의 변수를 사용하면 32개의 비트를 사용하여 데이터를 저장할 수 있고,

비트들을 직렬화 / 역직렬화하여 데이터를 세이브 / 로딩한다

 

생성한 AuraGameplayEffectContext 구조체는 아직까지 복사 연산을 수행할 수 없다

해당 구조체의 복사 연산을 위한 연산자오버로딩되지 않아 발생하는데,

언리얼 엔진에서 제공하는 TStructOpsTypeTraits 템플릿 구조체를 사용하면 쉽게 복사연산을 정의할 수 있다

 

1) AuraGameplayEffectContext 구조체 : NetSerialize 함수 오버라이드

오버라이드한 NetSerialize 함수의 첫 번째 로직

 

첫 번째 로직은 다음과 같다

uint32의 32개의 비트 중에서 9개를 사용하여 데이터를 직렬화하는데, 구성은 다음과 같다

  • 0 : Instigator의 직렬화   
  • 1 : EffectCauser 직렬화 
  • 2 : AbilityCDO 직렬화 
  • 3 : SourceObject 직렬화 
  • 4 : Actors 배열 직렬화 
  • 5 : HitResult 직렬화 
  • 6 : WorldOrigin 직렬화 
  • 8 : bIsBlockedHit 직렬화 
  • 9 : bIsCriticalHit 직렬화 

 

오버라이드한 NetSerialize 함수의 두 번째 로직

 

직렬화가 되었다면 해당하는 비트는 1로 설정되었으므로 
인자로 받은 FArchive1로 설정된 비트의 데이터를 다시 역직렬화하여 저장한다
역직렬화가 끝났으면 Archive를 로딩하고 true를 반환한다

 

2) AuraGameplayEffectContext 구조체 : 복사 연산 허용

 

AuraGameplayEffectContext를 대상으로 하는 StructOpsTypeTraits 구조체를 생성한다

열거형에 WithNetSerializer 옵션과 WithCopy 옵션을 true로 설정한다

 

 

Duplicate 함수를 위와 같이 오버라이드한다

로직을 살펴보면 복사연산을 하여 새로운 GameplayEffectContext를 생성하는 것을 확인할 수 있다

728x90
반응형