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

몬스터 원거리 공격 - 최종) 몬스터 원거리 공격 마무리

monstro 2025. 10. 3. 00:10
728x90
반응형

- 개요

몬스터의 원거리 공격을 위한 설정을 마무리한다

고블린 사수의 경우 새총을 사용하여 플레이어를 공격하는데, 이때 새총이 당겨지면서 투사체를 발사한다

따라서 이에 대한 처리를 추가적으로 진행해야 한다

 

1) C++ 를 사용한 작업

1 - 1) AuraDamageGameplayAbility 클래스

 

GA 블루프린트에서 진행하던 랜덤한 TaggedMontage를 가져오는 작업

C++ 클래스의 GetRandomTaggedMontageFromArray 함수에서 수행하도록 수정한다

BlueprintPure로 지정하여 실행핀을 사용하지 않도록 설정한다

 

 

로직은 위와 같다

TaggedMontage가 저장된 TArray를 인자로 받아 순회하면서 랜덤한 TaggedMontage를 반환한다

 

1 - 2) AuraProjectile 클래스

 

OnSphereOverlap 함수에 위의 로직을 추가하여 투사체가 같은 타입의 캐릭터에게 피해를 주지 않도록 설정한다

 

2) 언리얼 에디터

2 - 1) GA_MeleeAttack 블루프린트

로직 수정

 

AvatarActorAttackMontages로부터 랜덤한 TaggedMontage를 가져오는 로직을 

GetRandomTaggedMontageFromArray 함수를 통해 수행하도록 수정한다

 

2 - 2) BP_SlingshotRock 블루프린트

BeginPlay 이벤트

 

BeginPlay 이벤트를 구성하여 Yaw / Pitch / Roll을 랜덤한 값으로 설정한 후에 Sphere의 Collision을 설정한다

 

Tick 이벤트

 

Tick 이벤트를 구성하여 Yaw / Pitch / Roll의 값만큼 돌의 Rotation을 설정한다

 

2 - 3) GA_RangedAttack 블루프린트

ActivateAbility 이벤트

 

GA_MeleeAttack과 앞부분은 동일하지만, CombatSocketLocation을 가져온 후의 로직에서 차이가 존재한다

AvatarActor -> CombatTarget을 거쳐Target의 Location을 가져와 해당 Location으로 투사체를 생성한다

 

2 - 4) ABP_Slingshot 애니메이션 블루프린트

해당 애니메이션 블루프린트는 새총에서 사용하며 새총의 당겨짐을 표현하는 용도로 사용한다

 

EventGraph - BlueprintInitializeAnimation 이벤트

 

Init 함수에서 새총의 Owner를 가져와 해당 Owner의 SkeletalMeshComponentOwnerMesh로 저장한다

따라서 고블린 사수SkeletalMeshComponent를 저장하게 된다

 

EventGraph - BlueprintUpdateAnimation 이벤트

 

Update 함수에서 저장한 OwnerMeshRightHandSocket에 해당하는 소켓을 가져와

가져온 소켓의 TransformHandSocketTransform으로 저장한다

 

AnimGraph

 

HandSocketTransform을 분해하여 Location에 맞춰 새총의 Bone을 조정하고,

새총의 당겨짐을 의미하는 HoldingPouch 변수에 따라 일반적인 애니메이션당겨지는 애니메이션을 재생한다

 

2 - 5) AM_Attack_Goblin_Slingshot 애니메이션 몽타주

 

새총을 발사하는 애니메이션 몽타주 2개의 AnimNotify를 추가한다

각각 다음과 같다

  • ReleaseRock 이벤트 : 새총의 당겨지는 애니메이션 몽타주를 재생
  • GrabPouch 이벤트 : 새총의 애니메이션 블루프린트HoldingPouch를 설정

 

2 - 6) ABP_Goblin_Slingshot 애니메이션 블루프린트

EventGraph - BlueprintInitializeAnimation 이벤트

 

Init 이벤트를 위와 같이 구성하여

Owner -> Weapon -> Weapon의 AnimInstance 순서로 가져와 ABPSlingshot으로 설정한다

 

EventGraph - AnimNotify_ReleaseRock 이벤트

 

애니메이션 몽타주의 ReleaseRock 노티파이에 의해 실행되는 이벤트로서,

ABPSlingshot의 유효함에 따라 다르게 동작한다

  • 유효한 경우 : 새총의 AnimInstance의 HoldingPouchfalse로 설정 + 새총의 공격 애니메이션 몽타주 재생
  • 유효하지 않은 경우 : Init 이벤트의 로직 수행

 

EventGraph - AnimNotify_GrabPouch 이벤트

 

애니메이션 몽타주의 GrabPouch 노티파이에 의해 실행되는 이벤트로서,

새총의 AnimInstance의 HoldingPouchTrue로 설정한다

 

- 최종 실행 결과

 

728x90
반응형