본문으로 건너뛰기
Unreal Engine GAS(Gameplay Ability System) 심화LESSON 31

타기팅, Confirm, Cancel 흐름 설계하기

난이도심화
예상 시간190분
선수지식30강의 Ability Task

31강. 타기팅, Confirm, Cancel 흐름 설계하기

1. 이번 강의에서 해결할 문제​

타기팅은 조준 UI를 빠르게 보여 주는 클라이언트 흐름과 실제 명중을 결정하는 서버 흐름이 만나는 지점입니다. 클라이언트가 보낸 위치를 그대로 믿으면 벽 너머 공격과 사거리 조작을 막을 수 없고, Confirm·Cancel 정리를 놓치면 입력과 프리뷰 액터가 남습니다.

2. 학습 목표​

3. 핵심 개념​

FGameplayAbilityTargetDataHandle은 단일 타입이 아니라 HitResult, 위치, 액터 집합 같은 타깃 정보를 담는 핸들입니다. 소유 클라이언트는 로컬 조준과 프리뷰를 담당하고, 서버는 수신한 TargetData를 권한 있는 월드 상태로 검증한 뒤 Effect를 적용합니다. 다른 클라이언트는 확정된 Effect·Attribute·Cue만 관찰합니다.

4. 구현​

GA_TargetedStrike.cpp
void UGA_TargetedStrike::ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData)
{
Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);

auto* Task = UAbilityTask_WaitTargetData::WaitTargetData(
this, TEXT("StrikeTarget"), EGameplayTargetingConfirmation::UserConfirmed,
TargetActorClass);
Task->ValidData.AddDynamic(this, &ThisClass::HandleConfirmed);
Task->Cancelled.AddDynamic(this, &ThisClass::HandleCancelled);
Task->ReadyForActivation();
}

void UGA_TargetedStrike::HandleConfirmed(const FGameplayAbilityTargetDataHandle& Data)
{
if (!ValidateTargetDataOnServer(Data))
{
CancelAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true);
return;
}

ApplyGameplayEffectSpecToTarget(CurrentSpecHandle, CurrentActorInfo,
CurrentActivationInfo, Data, MakeOutgoingGameplayEffectSpec(DamageEffectClass));
EndAbility(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, true, false);
}

검증 함수는 Avatar 위치 기준 최대 거리, 서버 Trace의 차폐 결과, 대상의 생존·팀·충돌 채널을 확인합니다. Confirm과 Cancel 입력은 Enhanced Input에서 ASC의 타깃 확인/취소 입력으로 전달하고, Ability 종료 시 TargetActor와 프리뷰를 반드시 제거합니다. 엔진 버전에 따라 TargetActor API 시그니처가 달라질 수 있으므로 현재 UE5 헤더를 기준으로 맞춥니다.

5. 코드가 동작하는 이유​

로컬 플레이어는 입력 즉시 커서와 범위를 갱신하지만 최종 적용은 권한 서버에서만 일어납니다. Task가 Ability 종료와 함께 Delegate를 정리하므로 Cancel, 사망, Avatar 교체에서도 타기팅 상태가 남지 않습니다. Confirm은 의사 표현이지 판정 결과가 아닙니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

타기팅, Confirm, Cancel 흐름 설계하기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“타기팅, Confirm, Cancel 흐름 설계하기”에서 오류나 데이터 손실을 줄이는 선택은 무엇인가요?
  2. 문제 2‘TargetActor를 복제 상태 저장소로 사용’ 상태에 관한 “타기팅, Confirm, Cancel 흐름 설계하기” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

31강. 타기팅, Confirm, Cancel 흐름 설계하기 미완료 상태