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

ActivateAbility, CommitAbility, EndAbility의 책임

난이도심화
예상 시간145분
선수지식18강의 입력 태그 활성화

19강. ActivateAbility, CommitAbility, EndAbility의 책임

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

조준을 시작하자마자 Commit하면 사용자가 취소해도 Mana와 Cooldown이 소비됩니다. 명중 뒤에 Commit하면 자원이 없는 Client가 공격 Montage와 서버 Trace까지 반복할 수 있습니다. Ability마다 “되돌릴 수 없는 실행”이 시작되는 시점을 정해야 합니다.

2. 학습 목표​

3. 핵심 개념​

ActivateAbility는 실행 준비와 Task 시작, CommitAbility는 Cost·Cooldown 검사 및 적용, EndAbility는 활성 상태와 Task를 종료합니다. 조준형 스킬은 Target Confirm 직후, 즉시 대시는 이동을 시작하기 직전, 공격은 유효한 공격 창을 시작하기 전에 Commit하는 식으로 정책을 문서화합니다.

4. 구현​

GA_FireProjectile.cpp
void UGA_FireProjectile::HandleTargetConfirmed(
const FGameplayAbilityTargetDataHandle& TargetData)
{
if (!CommitAbility(
GetCurrentAbilitySpecHandle(),
GetCurrentActorInfo(),
GetCurrentActivationInfo()))
{
CancelAndEnd();
return;
}

if (HasAuthority(&CurrentActivationInfo))
SpawnValidatedProjectile(TargetData);

EndAbility(CurrentSpecHandle, CurrentActorInfo,
CurrentActivationInfo, true, false);
}

Confirm 전 Cancel은 Commit을 호출하지 않습니다. Commit 이후 서버 검증이 실패할 수 있는 기능은 실패 보상·Cooldown 정책을 별도로 정하고 악의적 TargetData가 비용 없이 서버 부하를 만들지 않게 합니다.

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

Commit이 ASC의 Cost와 Cooldown Effect를 같은 Activation Info에 적용하므로 예측과 서버 승인이 연결됩니다. 되돌릴 수 없는 동작 바로 전에 호출하면 취소 UX와 부정 요청 방지를 균형 있게 처리할 수 있습니다.

6. 실패 사례와 해결​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

ActivateAbility, CommitAbility, EndAbility의 책임 미니 퀴즈

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

0 / 2
  1. 문제 1“ActivateAbility, CommitAbility, EndAbility의 책임” 구현을 설계할 때 책임과 구조를 올바르게 나눈 선택은 무엇인가요?
  2. 문제 2“ActivateAbility, CommitAbility, EndAbility의 책임”의 작업 기준으로 ‘EndAbility 누락’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

19강. ActivateAbility, CommitAbility, EndAbility의 책임 미완료 상태