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

AbilityTasks - 최종) 투사체에 GameplayEffect 적용

monstro 2025. 8. 18. 23:10
728x90
반응형

- 개요

특정한 Tag가 연결된 입력을 수행하면 어빌리티를 발동하고

발동하는 어빌리티에서 Task를 수행하여 어빌리티의 타겟을 판단한다

이후 투사체에 GameplayEffect를 적용하여 적중당한 타겟에게 피해를 주도록 구성한다

몬스터에게 체력바 UI를 추가하여 입은 피해를 시각화한다

 

1) AuraProjectileSpell 클래스

 

생성할 투사체부여할 GameplayEffect 멤버 변수를 추가한다

 

 

SpawnProjectile 함수런타임에서 사용하기 위한 GESpecHandle을 생성하는 로직을 추가한다

어빌리티를 발동한 AvatarActor로부터 ASC를 가져와 GESpecHandle을 생성하고 투사체에 설정한다

 

2) AuraProjectile 클래스

 

GameplayEffect런타임에서 사용하기 위한 GESpecHandle 멤버 변수를 추가한다

 

 

OnSphereOverlap 함수Overlap된 타겟ASC를 가져와 GameplayEffect를 적용하는 로직을 추가한다

 

3) AuraEnemy 클래스

 

OverlayWidgetController 클래스에 포함되어 있던 Attribute 델리게이트 멤버변수를 추가한다

 

 

몬스터의 체력바 UI 역할을 수행할 WidgetComponent 멤버변수를 추가한다

 

 

생성자에서 WidgetComponent 멤버 변수를 SubObject 방식으로 생성한다

이후 생성한 SubObjectRootComponent에 Attach한다

 

 

BeginPlay 함수에 로직을 추가한다

UIComponent 멤버변수에서 UserWidget을 가져와 AuraUserWidget으로 캐스팅하여 반환한다

반환한 AuraUserWdigetWidgetController를 설정한다

 

이후 ASCGetGameplayAttributeValueChangeDelegate 함수를 호출하여

HealthMaxHealth의 값이 변경되면 델리게이트 멤버변수를 통해 브로드캐스트하도록 람다함수를 바인드한다

최종적으로 BeginPlay 함수가 호출된 시점Health와 MaxHealth 값을 브로드캐스트한다

 

4) 언리얼 에디터

4 - 1) 데미지를 주는 GameplayEffect 블루 프린트

 

위와 같이 Health 어트리뷰트-10의 값을 주도록 설정하였다

 

4 - 2) GA_FireBolt 블루 프린트

 

투사체에 설정할 GameplayEffect를 위와 같이 설정하였다

 

4 - 3) WBP_EnemyHealthBar 위젯 블루 프린트

WidgetControllerSet 이벤트의 첫 번째 시퀀스

 

WidgetControllerSet 이벤트의 두 번째 시퀀스

 

WidgetControllerSet 이벤트의 세 번째 시퀀스

 

위의 시퀀스를 거쳐서 몬스터의 체력바 UI에 대한 설정을 진행한다

최종적으로 Health 어트리뷰트와 MaxHealth 어트리뷰트가 변경되면 UI가 갱신된다

 

4 - 4) BP_EnemyBase 블루 프린트

 

WidgetComponent를 위와 같이 설정하였다

 

- 최종 실행 결과

 

728x90
반응형