- 개요
몬스터에 피격 어빌리티를 부여하여 플레이어의 공격에 명중하면 피격 어빌리티를 발동하고
연결된 피격 GameplayEffect를 부여하여 피격 애니메이션 몽타주를 재생하도록 구성한다
1) CharacterClassInfo 클래스

GameplayAbiltiy를 저장하는 TArray인 CommonAbilities 멤버 변수를 추가한다
해당 멤버 변수를 사용하여 직업에 관계없이 공통적으로 부여할 GameplayAbility를 저장한다
2) AuraAbilitySystemLibrary 클래스

GiveStartupAbilities 함수를 추가하여 CommonAbilities에 저장된 GameplayAbility를 부여한다

GiveStartupAbilities 함수의 로직은 위와 같다
GameMode -> CharacterClassInfo -> CharacterClassInfo -> CommonAbilities를 가져와 순회하면서
GameplayAbilitySpec을 생성하고 생성한 GASpec을 ASC에 부여한다
3) AuraGameplayTags 구조체

피격되었음을 의미하는 GameplayTag를 추가한다

InitializeNativeGameplayTags 함수에 위의 로직을 추가한다
따라서 Effects_HitReact 태그를 설정한 후에 실제로 추가한다
4) AuraAttributeSet 클래스

HandleIncomingDamage 함수에 위의 로직을 추가한다
Target이 피해를 받았지만 쓰러지지 않았다면 Effects_HitReact 태그와 연결된 GameplayAbility를 발동한다
5) CombatInterface 클래스

피격 애니메이션 몽타주를 반환하기 위한 함수를 추가한다
6) AuraCharacterBase 클래스

피격 시 재생할 애니메이션 몽타주를 멤버변수로 추가한다


CombatInterface의 GetHitReactMontage 함수를 오버라이드한다
추가한 애니메이션 몽타주 멤버변수를 반환한다
7) AuraEnemy 클래스

몬스터가 피격되는 경우 재생할 애니메이션 몽타주와 관련한 요소들을 추가한다
변수의 구성은 다음과 같다
- bHitReacting : 피격 여부를 판정
- BaseWalkSpeed : 평상시의 이동 속도

HitReactTagChanged 함수의 로직은 위와 같다
몬스터에게 피격의 GameplayTag가 설정되면 NewCount가 1로 들어와 이동속도를 0으로 설정하지만,
피격의 GameplayTag가 제거되면 NewCount가 0으로 들어와 이동속도를 평상시 속도로 재설정한다

BeginPlay 함수를 위와 같이 수정한다
몬스터의 이동속도를 설정하고, GiveStartupAbilities 함수를 호출하여 공용 어빌리티를 부여한다
다음의 로직의 중요도가 높은데, EGameplayTagEventType::NewOrRemoved을 사용하여
Effects_HitReact의 태그가 설정되거나 제거되는 경우, 콜백함수로 HitReactTagChanged 함수를 호출한다
이때 설정되는 경우 1의 값을, 제거되는 경우 0의 값을 콜백함수에 전달한다
8) 언리얼 에디터

생성한 고블린 사수와 고블린 창병의 블루 프린트에 피격 애니메이션 몽타주를 설정한다

GE_HitReact를 위와 같이 설정한다
해당 GE는 피격 어빌리티가 발동되면 Target에게 적용되어 설정한 GameplayTag를 Target에게 설정한다
- GA_HitReact의 ActivateAbility 이벤트의 로직

GE_HitReact를 어빌리티를 발동한 주체에게 적용하고 ActiveGameplayEffect를 캐싱한다
이후 AvatarActor를 가져와 CombatInterface로 캐스트하여 GetHitReactMontage 함수를 호출한다

반환된 애니메이션 몽타주를 재생하고, 부여된 GameplayEffect를 제거하고 어빌리티를 종료한다

이전에 만든 DA_CharacterClassInfo의 CommonAbilities에 위와 같이 구성한 GA_HitReact를 추가한다
- 최종 실행 결과
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 데미지 처리 - 4) ExecutionCalculation 클래스 적용 (0) | 2025.08.28 |
|---|---|
| 데미지 처리 - 3) 입은 데미지의 시각화 + 죽음 처리 (0) | 2025.08.28 |
| 데미지 처리 - 1) SetByCaller 방식을 사용한 Tag에 따른 데미지 값 설정 (0) | 2025.08.22 |
| RPG 직업군 - 최종) RPG 직업군 생성 및 AttributeSet 설정 (0) | 2025.08.21 |
| AbilityTasks - 최종) 투사체에 GameplayEffect 적용 (0) | 2025.08.18 |