AttackCheck GA 생성
GameplayAbility를 상속받아 PPGA_AttackHitCheck를 생성
PPGA_AttackHitCheck 헤더파일
#include "CoreMinimal.h"
#include "Abilities/GameplayAbility.h"
#include "PPGA_AttackHitCheck.generated.h"
/**
*
*/
UCLASS()
class PROJECT_P_API UPPGA_AttackHitCheck : public UGameplayAbility
{
GENERATED_BODY()
public:
UPPGA_AttackHitCheck();
virtual void ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData) override;
protected:
UFUNCTION()
void TraceResultCallback(const FGameplayAbilityTargetDataHandle& DataHandle);
};
- UPPGA_AttackHitCheck();
- 생성자
- virtual void ActivateAbility(~~~) override;
- GA 실행 함수 상속
- void TraceResultCallback(const FGameplayAbilityTargetDataHandle& DataHandle);
- AttackCheckGA에서
AT를 생성 → AT에서 TargetActor를 생성 → TargetActor에서 공격판정
→ TargetActor에서 AT로 콜백 → AT에서 AttackCheckGA에서 콜백
순으로 실행 됨 - TargetActor 부모 클래스에 선언되어 있는 델리게이트에
매개변수로 (const FGameplayAbilityTargetDataHandle&)가 들어감
그래서 콜백함수도 똑같이 (const FGameplayAbilityTargetDataHandle&)를 넣어줘야 함
- AttackCheckGA에서
Cpp파일
생성자
UPPGA_AttackHitCheck::UPPGA_AttackHitCheck()
{
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
}
인스턴싱 정책 설정
ActivateAbility
void UPPGA_AttackHitCheck::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData)
{
Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
//#include "GA/AT/PPAT_Trace.h" 추가
//#include "GA/TA/PPTA_Trace.h" 추가
UPPAT_Trace* AttackTraceTask = UPPAT_Trace::CreateTask(this, APPTA_Trace::StaticClass());
AttackTraceTask->OnComplete.AddDynamic(this, &UPPGA_AttackHitCheck::TraceResultCallback);
AttackTraceTask->ReadyForActivation();
}
- Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
- 부모함수 실행
- UPPAT_Trace* AttackTraceTask = UPPAT_Trace::CreateTask(this, APPTA_Trace::StaticClass());
- 어빌리티 태스크 생성
- CreateTask() 함수는 AT생성시 필수적으로 생성하는 함수
매개변수로 AT를 소유할 GA, 추가적으로 필요한 변수를 받음 - 해당 AT는 매개변수로 (오너GA, 생성할 TA클래스 정보)를 받음
- AttackTraceTask->OnComplete.AddDynamic(this, &UPPGA_AttackHitCheck::TraceResultCallback);
- AT가 완료됐을때 알려줄 델리게이트에 콜백 함수를 바인드
- AttackTraceTask->ReadyForActivation();
- AT 실행
TraceResultCallback
void UPPGA_AttackHitCheck::TraceResultCallback(const FGameplayAbilityTargetDataHandle& DataHandle)
{
//#include "AbilitySystemBlueprintLibrary.h" 추가
if (UAbilitySystemBlueprintLibrary::TargetDataHasHitResult(DataHandle, 0))
{
FHitResult HitResult = UAbilitySystemBlueprintLibrary::GetHitResultFromTargetData(DataHandle, 0);
PPGAS_LOG(LogGAS, Log, TEXT("Target %s Detected"), *(HitResult.GetActor()->GetName()));
}
bool bReplicateEndAbility = true;
bool bWasCancelled = false;
EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, bReplicateEndAbility, bWasCancelled);
}
- if (UAbilitySystemBlueprintLibrary::TargetDataHasHitResult(DataHandle, 0))
- UAbilitySystemBlueprintLibrary의 TargetDataHasHitResult 함수를 통해 DataHandle에 HitResult가 있는지 확인
DataHandle은 TArray 형태로 데이터를 저장함 - DataHandle의 0번째 원소에 HitResult가 있으면
- FHitResult HitResult = UAbilitySystemBlueprintLibrary::GetHitResultFromTargetData(DataHandle, 0);
- GetHitResultFromTargetData함수를 통해 DataHandle에서 HitResult를 가져옴
- PPGAS_LOG(LogGAS, Log, TEXT("Target %s Detected"), *(HitResult.GetActor()->GetName()));
- 추후 어트리뷰트를 만든후 공격 효과를 작성 지금은 단순 로그만 출력
- UAbilitySystemBlueprintLibrary의 TargetDataHasHitResult 함수를 통해 DataHandle에 HitResult가 있는지 확인
- bool bReplicateEndAbility = true;
bool bWasCancelled = false;- EndAbility를 호출하기 위해 필요한 bool변수 생성
- EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, bReplicateEndAbility, bWasCancelled);
- EndAbility 호출
- GA의 목적인 공격판정을 끝냈으므로 EndAbility를 호출함
블루프린트 생성 및 설정
AttackHitCheck GA를 상속받아 블루프린트를 생성
블루프린트를 연후 Trigggers에서 트리거 태그를 설정
트리거 설정 후 UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(OwerActor, TriggerGameplayTag, PayLoadData);
함수로 해당 GA를 실행할 수 있음
'포트폴리오 제작' 카테고리의 다른 글
Project_P 공격 판정 구현(4) TA 타겟액터 구현 (0) | 2024.09.11 |
---|---|
Project_P 공격 판정 구현(3) Trace 어빌리티 태스크 생성 (0) | 2024.09.06 |
Project_P 공격 판정 구현(1) 애니메이션 노티파이 생성 및 콤보어택몽타주 생성 (1) | 2024.09.05 |
Project_P ComboActionData 생성 및 콤보공격을 위한 캐릭터클래스 설정 (0) | 2024.09.04 |
Project_P Attack GA 생성(3) 블루프린트 설정 (0) | 2024.09.04 |