BossFight - 플레이어 피격 모션

김대겸·2025년 5월 13일

플레이어 피격 모션

이번에는 GameplayEvent를 통해 피격시 애니메이션을 재생하는 기능을 구현 해보자.

우선 아래와 같이 GameplayTag를 추가 해주었다.

< Tag >

  • Player_Event_OnHit_Normal -> 일반 공격 피격 시 발송될 Event
  • Player_Event_OnHit_Power -> 강 공격 피격 시 발송될 Event
  • Player_Event_OnHit_Normal -> 적의 공격 타입(기본 공격)
  • Player_Event_OnHit_Power -> 적의 공격 타입(강 공격)

그리고 기존의 OnHitActor()함수를 아래와 같이 수정 해주었다.

🎮 AEnemyWeapon.cpp

void AEnemyWeapon::OnHitActor(AActor* HitActor)
{
	if (HitedActor == HitActor) { return; }

	HitedActor = HitActor;
	if (UBFFunctionLibrary::NativeDoseActorHaveTag(HitedActor, BFGameplayTag::Player_Status_Avoiding)) { return; }

	FGameplayEventData Data;
	Data.Instigator = GetOwner();
	Data.Target = HitActor;

	UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(GetOwner(), BFGameplayTag::Shared_Event_OnDamaged, Data);

	if (UBFFunctionLibrary::NativeDoseActorHaveTag(GetOwner(), BFGameplayTag::Enemy_Status_Attack_Normal))
	{
		UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(HitedActor, BFGameplayTag::Player_Event_OnHit_Normal, FGameplayEventData());
	}
	else if (UBFFunctionLibrary::NativeDoseActorHaveTag(GetOwner(), BFGameplayTag::Enemy_Status_Attack_Power))
	{
		UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(HitedActor, BFGameplayTag::Player_Event_OnHit_Power, FGameplayEventData());
	}
}

이를 통해 적 공격시, Trace에 충돌하면 현재 공격 Type이 Normal인지 Power인지 파악해서 다른 GameplayEvent를 발송 하도록 코드를 작성 하였다.

다음으로 해당 Event를 받았을때 작동할 Ability를 구현 해보자.

위와 같이 노드를 구성하였다. 피격모션중에는 공중에떠서 날라가는 모션도 있음으로, Combo공격과 같이 CheackAir 함수를 통해 MoventMode를 변경 하도록 구현 하였다.

이후 무기의 WeaponData구조체에 어빌리티를 추가하였다. 이때 InputTag는 최상위 Tag인 InputTag로 지정 해주었다.

작동 영상

일반 공격 피격

강 공격 피격

다음에는 각 무기별 회피 모션과, 피격 모션을 추가하고, 적 캐릭터의 공격 시 플레이어 캐릭터가 Collision에 끼는 문제를 해결 해볼 예정이다.

0개의 댓글