- 개요
NetSerialize 함수에서 사용하는 인자 중에서 FArchive는 데이터를 세이브 / 로딩 / 보관하는 역할을 수행한다
이때 세이브 / 로딩하기 위해 데이터를 직렬화 / 역직렬화하는 로직이 필요하다
uint32의 변수를 사용하면 총 32개의 비트를 사용하여 데이터를 저장할 수 있고,
이 비트들을 직렬화 / 역직렬화하여 데이터를 세이브 / 로딩한다
생성한 AuraGameplayEffectContext 구조체는 아직까지 복사 연산을 수행할 수 없다
해당 구조체의 복사 연산을 위한 연산자가 오버로딩되지 않아 발생하는데,
언리얼 엔진에서 제공하는 TStructOpsTypeTraits 템플릿 구조체를 사용하면 쉽게 복사연산을 정의할 수 있다
1) AuraGameplayEffectContext 구조체 : NetSerialize 함수 오버라이드

첫 번째 로직은 다음과 같다
uint32의 32개의 비트 중에서 9개를 사용하여 데이터를 직렬화하는데, 구성은 다음과 같다
- 0 : Instigator의 직렬화
- 1 : EffectCauser 직렬화
- 2 : AbilityCDO 직렬화
- 3 : SourceObject 직렬화
- 4 : Actors 배열 직렬화
- 5 : HitResult 직렬화
- 6 : WorldOrigin 직렬화
- 8 : bIsBlockedHit 직렬화
- 9 : bIsCriticalHit 직렬화

직렬화가 되었다면 해당하는 비트는 1로 설정되었으므로
인자로 받은 FArchive에 1로 설정된 비트의 데이터를 다시 역직렬화하여 저장한다
역직렬화가 끝났으면 Archive를 로딩하고 true를 반환한다
2) AuraGameplayEffectContext 구조체 : 복사 연산 허용

AuraGameplayEffectContext를 대상으로 하는 StructOpsTypeTraits 구조체를 생성한다
열거형에 WithNetSerializer 옵션과 WithCopy 옵션을 true로 설정한다

Duplicate 함수를 위와 같이 오버라이드한다
로직을 살펴보면 복사연산을 하여 새로운 GameplayEffectContext를 생성하는 것을 확인할 수 있다
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 데미지 처리 심화 - 4) 처리된 데미지에 따라 다른 UI 출력 (0) | 2025.09.13 |
|---|---|
| 데미지 처리 심화 - 3) 사용자 정의 AbilitySystemGlobals 클래스 & 사용자 정의 GEContext 클래스의 사용 (0) | 2025.09.12 |
| 데미지 처리 심화 - 1) GameplayEffectContext의 사용과 사용자 정의 GEContext (0) | 2025.09.12 |
| 데미지 처리 - 최종) 능력치를 고려한 데미지 처리 (0) | 2025.08.30 |
| 데미지 처리 - 4) ExecutionCalculation 클래스 적용 (0) | 2025.08.28 |