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

데미지 처리 심화 - 1) GameplayEffectContext의 사용과 사용자 정의 GEContext

monstro 2025. 9. 12. 12:19
728x90
반응형

- 개요

GameplayEffect런타임 시점에서 GameplayEffectSpec으로 생성되어 대상에게 적용된다

이때 GameplayEffectSpec만으로는 정보가 부족하기 때문에 GameplayEffectContext를 사용한다

 

GamplayEffectContext는 구조체로서,

GESpec 말고도 해당 GESpec을 생성한 Instigator나, GESpec이 적용될 Target을 저장한다

단, GameplayEffectContext에 접근하기 위해서는 GameplayEffectContextHandle 래퍼 클래스를 사용한다

 

 1) SpawnProjectile 클래스

 

AuraProjectileSpell 클래스의 SpawnProjectile 함수를 위와 같이 수정하였다

GameplayEffectContextHandle을 사용하여 GameplayEffectContext를 설정한다

  • 해당 GameplayEffect를 동반하는 GameplayAbility 저장
  • 해당 GE를 생성SourceObject 저장
  • 해당 GE와 관련Actor 저장
  • 해당 GE를 적용할 타겟을 탐색하기 위한 HitResult 저장

 

2) AuraAbilityTypes 클래스 - AuraGameplayEffectContext 구조체

 

GameplayEffectContext 구조체를 상속받은 AuraGameplayEffectContext 구조체를 생성한다

멤버 변수는 다음과 같이 구성하였다

  • bIsBlockedHit : 공격받은 대상공격을 방어했는지 여부
  • bIsCriticalHit : 공격받은 대상크리티컬 피해를 받았는지 여부 

 

멤버 함수의 구성은 다음과 같다

  • IsCriticalHit 함수 / SetIsCriticalHit 함수 : bIsCriticalHit 멤버변수에 대한 Getter / Setter
  • IsBlockedHit 함수 / SetIsBlockedHit 함수 : bIsBlockedHit 멤버변수에 대한 Getter / Setter
  • GetScriptStruct 함수 : 자식 클래스에서 오버라이드해야 하는 함수로서, 자식 클래스의 static 인스턴스 반환
  • NetSerialize 함수 : 자식 클래스에서 오버라이드해야 하는 함수로서, 담겨진 정보를 직렬화하는 용도

 

 

NetSerialize 함수의 로직은 일단, 위와 같이 구성하였다

728x90
반응형