본문 바로가기
포트폴리오 제작

Project_P 공격 판정 구현(1) 애니메이션 노티파이 생성 및 콤보어택몽타주 생성

by k99812 2024. 9. 5.

애니메이션 노티파이 생성


 

AnimNotify를 상속받아 AnimNotify_GASAttackHitCheck 클래스 생성

 

AnimNotify_GASAttackHitCheck  헤더파일


#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "GameplayTagContainer.h"
#include "AnimNotify_GASAttackHitCheck.generated.h"

/**
 * 
 */
UCLASS()
class PROJECT_P_API UAnimNotify_GASAttackHitCheck : public UAnimNotify
{
	GENERATED_BODY()
	
public:
	UAnimNotify_GASAttackHitCheck();

protected:
	virtual FString GetNotifyName_Implementation() const override;
	virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override;

protected:
	UPROPERTY(EditAnywhere, Category = "Tag")
	FGameplayTag TriggerGameplayTag;

};

 

  • UAnimNotify_GASAttackHitCheck();
    • 생성자
  • virtual FString GetNotifyName_Implementation() const override;
    • 부모함수 GetNotifyName에 UFUNCTION(BlueprintNativeEvent) 매크로가 붙어 있어
      해당함수를 상속하려면 GetNotifyName() override가 아니라 _Implementation을 붙여야 함
    • 에디터에서 해당 노티파이를 나타낼 이름을 설정하는 함수
  • virtual void Notify(~~~) override;
    • 노티파이 실행부
  • FGameplayTag TriggerGameplayTag;
    • 태그를 이용해 공격판정GA를 실행
    • 에디터에서 태그를 지정할 수 있도록 UPROPERTY(EditAnywhere, Category = "Tag") 지정

https://ciel45.tistory.com/20

 

[언리얼 엔진 5] BlueprintNativeEvent에 대해서, 사용 시 주의할 점

https://docs.unrealengine.com/5.3/ko/ufunctions-in-unreal-engine/ UFunctions 게임플레이 클래스용 함수 생성 및 구현에 대한 개요입니다. docs.unrealengine.com 함수 지정자 목차에 관련 내용이 있다. 함수에 UFUNCTION(Blue

ciel45.tistory.com

 

 Cpp파일


생성자

생성자에선 특별히 작성할 코드가 없음

 

GetNotifyName_Implementation

FString UAnimNotify_GASAttackHitCheck::GetNotifyName_Implementation() const
{
	return FString(TEXT("GASAttackHitCheck"));
}

 

노티파이에 설정할 이름을 FString으로 리턴

 

Notify

void UAnimNotify_GASAttackHitCheck::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
	Super::Notify(MeshComp, Animation, EventReference);

	if (MeshComp)
	{
		AActor* OwerActor = MeshComp->GetOwner();
		if (OwerActor)
		{
			FGameplayEventData PayLoadData;

			//#include "AbilitySystemBlueprintLibrary.h" 추가
			UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(OwerActor, TriggerGameplayTag, PayLoadData);
		}
	}
}

 

  • Super::Notify(MeshComp, Animation, EventReference);
    • 부모함수 실행
  • if (MeshComp)
    • 노티파이의 오너가 메시컴포넌트가 있으면
    • AActor* OwerActor = MeshComp->GetOwner();
      • 메시컴포넌트의 오너액터를 가져옴
    • if (OwerActor)
      • 오너액터가 있으면
      • FGameplayEventData PayLoadData;
        • SendGameplayEventToActor 함수로 GA실행시 FGameplayEventData를 매개변수로 받아
          FGameplayEventData에 필요한 데이터를 넣어 GA에 전달해줄 수 있음
      • UAbilitySystemBlueprintLibrary::SendGameplayEventToActor
        (OwerActor, TriggerGameplayTag, PayLoadData);
        • #include "AbilitySystemBlueprintLibrary.h" 추가
        • 게임플레이태그를 트리거로 해당함수를 통해 GA를 발동시킬  수 있음

 

애니메이션 노티파이 설정


애니메이션 노티파이는 애니메이션 시퀀스 또는 애니메이션 몽타주에서 특정 프레임에 노티파이를 설정해

애니메이션 재생시 특정 프레임이 되면 노티파이가 실행됨

ex) 특정 프레임에 이펙트 재생, 사운드 재생, 공격 판정 등

 

 

  • Notifies 아래 1번 행에서 우클릭을 하면 노티파이를 추가할 수 있음
    노티파이를 추가하면 Timing에 빨간색으로 타이밍을 조절할 수 있음
  • 콤보어택몽타주에 위에서 생성한 GASAttackHitCheck를 추가한 뒤 타이밍 설정

 

  • 추가한 노티파이를 눌러 변수로 추가한 게임플레이태그를 설정할 수 있음

 

몽타주 생성 방법

 

우클릭 → 애니메이션 → 애니메이션 몽타주로 생성

 

 

  • 제일위 Montage행에서 우클릭으로 섹션을 추가할 수 있음
    Attack GA에서 해당 섹션 이름으로 섹션별로 몽타주를 실행함
  • DefaultGroup행에서 화살표를 누르면 애니메이션 슬롯을 지정할 수 있음
    오른쪽 하단 애셋 브라우저에서 애니메이션 시퀀스를 드래그 앤 드롭으로 추가할 수 있음

  • Timing에서 섹션 위치와 노티파이의 타이밍을 설정할 수 있음
  • Notifies에서 노티파이를 추가 제거할 수 있음

 

  • 우측 하단 Montage Sections에서 흰색 사각형 클릭시
    섹션 실행시 다음섹션으로 넘어갈지 안넘어 갈지 연결을 관리할 수 있음
  • 위 스크린샷은 섹션연결을 다끊어 한 섹션 실행시 다음 섹션으로 넘어가지 않음