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

전투 시스템 - 3) GE와 AttributeSet에 DamageEffectParams 구조체 적용

monstro 2025. 11. 14. 17:23
728x90
반응형

- 개요

이전에 생성한 DamageEffectParams 구조체를 실제 GEAttributeSet에 적용한다

 

- C++ 사이드

1) AuraAttributeSet 클래스

 

Debuff 함수를 추가하여 Attribute에 디버프를 적용한다

 

 

HandleIncomingDamage 함수에 위와 같이 로직을 추가하여

디버프를 적용할 수 있다Debuff 함수를 호출하고 인자를 넘겨주어 디버프를 적용한다

 

 

Debuff 함수는 아직 별다른 로직을 구성하지는 않는다

 

2) AuraGameplayEffectContext 클래스

AuraGameplayEffectContext 클래스 수정

 

AuraGameplayEffectContext 클래스에 위와 같이 디버프 관련 요소를 가져오거나 설정하는 함수를 추가한다

 

AuraGameplayEffectContext 클래스 수정

 

디버프 관련 요소를 의미하는 멤버변수를 추가한다

 

NetSerialize 함수 수정 (1) - 직렬화

 

NetSerialize 함수 수정 (2) - 역직렬화

 

NetSerialize 함수에 위와 같이 로직을 추가한다

사용중인 0부터 8까지의 비트 이후에 9부터 13까지의 비트를 사용하여 디버프 관련 요소 직렬화하여 저장하고

 9부터 13까지의 비트를 역직렬화하여 Archive에 저장한다

 

3) AuraAbilitySystemLibrary 클래스

 

위와 같이 디버프와 관련된 요소를 설정하고 가져오는 함수를 추가한다

 

추가한 함수 (1)

 

추가한 함수 (2)

 

위와 같이 AuraGameplayEffectContext 클래스에 접근하여 값을 가져오거나 설정하도록 로직을 구성한다

 

4) ExecCalc_Damage 클래스

 

공격 어빌리티를 수행한 이후 Target에게 적용할 데미지 GE에서 사용하는 ExecCalc_Damage 클래스

위와 같이 DetermineDebuff 함수를 추가하여 디버프를 적용한다

 

 

연산에 참고할 Attribute를 지정하는 AuraDamageStatics 구조체에서 TagsToCaptureDefs 멤버변수를 제거하고,

해당 멤버변수에 필요한 값을 저장하는 로직도 제거한다

 

 

DetermineDebuff 함수의 로직은 위와 같다

GameplayTag에서 저장한 속성 별 데미지디버프의 Tag를 순회하면서 속성 별 데미지를 가져온다

이어서 디버프를 적용할 수 있는 확률디버프에 대한 저항수치 가져와 연산하여 디버프를 적용할 수 있는 판단한다

이후 디버프를 적용할 수 있다면, 인자로 받은 GESpec으로부터 GEContextHandle을 가져오고

가져온 GEContextHandle의 디버프 관련 수치를 설정한다

 

 

Execute 함수의 로직을 위와 같이 수정한다

AuraDamageStatics 구조체의 멤버변수를 사용하지 않고, 지역변수를 사용하여 연산에 참고할 Attribute를 지정한다

이후, 적용할 GESpec의 디버프를 적용하기 위해 DetermineDebuff 함수를 호출하고,

ResistanceTag에 대한 값을 캡쳐하여 저장한다

 

- 블루프린트 사이드

1) GE_SecondaryAttributes_Enemy 블루프린트

 

몬스터가 사용할 SecondaryAttribute를 설정하는 GE를 추가한다

 

- 최종 실행 결과

 

728x90
반응형