Unreal Engine GAS(Gameplay Ability System) 심화LESSON 30
Ability Task를 사용해야 하는 이유와 대표 패턴
난이도심화
예상 시간180분
선수지식29강의 비동기 이동 Ability
30강. Ability Task를 사용해야 하는 이유와 대표 패턴
1. 이번 강의에서 해결할 문제
Ability 안에서 World Timer와 Anim Delegate를 직접 등록하면 Cancel·Avatar 변경 때 해제를 놓치기 쉽습니다. Ability Task는 여러 프레임 작업을 Ability 수명과 연결하지만 Task 자체가 네트워크 상태를 자동 복제하는 것은 아닙니다.
2. 학습 목표
3. 핵심 개념
Task는 UAbilityTask를 상속한 비동기 작업이며 Ability가 끝날 때 늦어도 종료됩니다. Task는 Ability의 네트워크 실행과 복제 데이터에 간접적으로 동기화되며 임의 멤버가 자동 복제되는 것은 아닙니다.
4. 구현
GA_BasicAttack.cpp Task 연결
UAbilityTask_PlayMontageAndWait* MontageTask =
UAbilityTask_PlayMontageAndWait::CreatePlayMontageAndWaitProxy(
this, NAME_None, AttackMontage, 1.0f);
MontageTask->OnCompleted.AddDynamic(this, &ThisClass::HandleMontageCompleted);
MontageTask->OnInterrupted.AddDynamic(this, &ThisClass::HandleMontageInterrupted);
MontageTask->OnCancelled.AddDynamic(this, &ThisClass::HandleMontageInterrupted);
MontageTask->ReadyForActivation();
UAbilityTask_WaitGameplayEvent* HitWindowTask =
UAbilityTask_WaitGameplayEvent::WaitGameplayEvent(
this, TAG_Event_Attack_HitWindow, nullptr, true, true);
HitWindowTask->EventReceived.AddDynamic(this, &ThisClass::HandleHitWindow);
HitWindowTask->ReadyForActivation();
Custom Task는 재사용되는 비동기 작업, 여러 Delegate, 정리 로직이 있을 때 만듭니다. 단순 함수 한 번을 Task로 감싸지 않습니다. Activate, OnDestroy, EndTask 경로를 구현합니다.
5. 코드가 동작하는 이유
Task가 Ability의 GameplayTask 소유권에 등록되어 Ability 종료·취소와 함께 정리됩니다. Montage 완료·중단과 Gameplay Event가 명시적 Delegate로 Ability 실행 흐름에 합류합니다.
6. 실패 사례와 해결
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2Ability Task를 사용해야 하는 이유와 대표 패턴 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
30강. Ability Task를 사용해야 하는 이유와 대표 패턴 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.