0. 공격 과정
(1) 애니메이션 출력
- Get Combat Target 함수를 사용하여 타겟 가져옴
- 가져온 타겟에 대한 모션 워핑
- 공격 몽타주 랜덤 선택
- 몽타주 재생 후 몽타주 태그에 대한 게임플레이 이벤트 대기
TaggedMontage는 몽타주와 태그가 쌍으로 지정되어있다.
몽타주 재생 후 태그 호출을 보장하기 위해 몽타주 재생이 끝나면 해당 태그를 보내 게임플레이 이벤트를 실행한다.
(2) 공격 판정
- 무기 소켓 위치 가져오기
- 소켓으로부터 투사체 스폰
- 대상을 향해 투사체 발사
1. 타겟에 대한 모션 워핑 및 공격 몽타주 가져오기
(1) 블루프린트 그래프
(2) Get Random Tagged Montage From Array 함수 - 공격 몽타주 랜덤 선택
블루프린트 노드가 복잡해짐에 따라 C++로 간단하게 함수로 만들어서 사용한다.
UFUNCTION(BlueprintPure)
FTaggedMontage GetRandomTaggedMontageFromArray(const TArray<FTaggedMontage>& TaggedMontages) const;
FTaggedMontage UAuraDamageGameplayAbility::GetRandomTaggedMontageFromArray(const TArray<FTaggedMontage>& TaggedMontages) const
{
if (TaggedMontages.Num() > 0)
{
const int32 Selection = FMath::RandRange(0, TaggedMontages.Num() - 1);
return TaggedMontages[Selection];
}
return FTaggedMontage();
}
2. 몽타주 실행 후 태그에 대한 게임플레이 이벤트 대기
공격 모션 중 피격당하거나 기타의 이유로 끊기기 원하는 경우 On Completed, On Interrupted, On Cancelled 핀에 End Ability 노드를 연결해야 한다.
3. 소켓에서 투사체 스폰
4. 투사체(돌)에 랜덤 스핀 넣기
5. 아군 사격(Friendly Fire) 방지
void AAuraProjectile::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
if (DamageEffectSpecHandle.Data.IsValid() && DamageEffectSpecHandle.Data.Get()->GetContext().GetEffectCauser() == OtherActor)
return;
// 아군 사격 방지
if (UAuraAbilitySystemLibrary::IsNotFriend(DamageEffectSpecHandle.Data.Get()->GetContext().GetEffectCauser(), OtherActor))
{
return;
}
아군 사격을 방지함과 동시에 아군을 뚫고 지나가 상대방을 공격하도록 할 것이다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
16-1. AI 마법 공격 - (1) 고블린 주술사 (0) | 2025.01.03 |
---|---|
15-5. AI 원거리 공격 - (5) 새총 애니메이션 적용 (0) | 2025.01.03 |
15-3. AI 원거리 공격 - (3) 새총 고블린 공격 몽타주 (0) | 2025.01.03 |
15-2. AI 원거리 공격 - (2) 원거리 공격 어빌리티 부여 (0) | 2025.01.03 |
15-1. AI 원거리 공격 - (1) 원거리 공격 어빌리티 생성 (0) | 2025.01.03 |