어빌리티 태스크(C++ 클래스 UAbilityTask
)는 보다 일반적인 게임플레이 태스크 클래스의 특수한 형태로, 게임플레이 어빌리티와 함께 작동하도록 되어 있습니다. 게임플레이 어빌리티 시스템을 사용하는 게임에는 보통 고유한 게임플레이 기능을 구현하는 다양한 커스텀 어빌리티 태스크가 포함되어 있습니다. 이러한 커스텀 어빌리티 태스크는 게임플레이 어빌리티 실행 중에 비동기 작업을 수행하며, 네이티브 C++ 코드에서 델리게이트를 호출하거나 블루프린트에서 하나 이상의 출력 실행 핀을 이동하여 실행 흐름에 영향을 미칠 수 있습니다. 이를 통해 어빌리티가 여러 프레임에서 실행되고, 동일 프레임에서 여러 개의 서로 다른 기능을 수행할 수 있습니다. 대부분의 어빌리티 태스크에는 즉시 발동하는 실행 핀이 있으므로, 태스크 시작 후에도 블루프린트가 계속 실행되게 합니다. 또한 딜레이 후 발동되거나, 발생하거나 발생하지 않을 수 있는 특정 이벤트에 뒤따라 발동되는 태스크별 핀이 있는 경우도 있습니다.
어빌리티 태스크는 EndTask
함수를 호출하여 자체적으로 종료되거나, 해당 태스크를 실행한 게임플레이 어빌리티가 끝날 때 자동 종료되도록 대기할 수 있습니다. 이는 팬텀 어빌리티 태스크가 실행되어 CPU 사이클 및 메모리가 누수되는 것을 방지합니다. 예를 들어, 하나의 어빌리티 태스크가 주문 시전 애니메이션을 재생하는 동안 다른 어빌리티 태스크는 플레이어의 조준 지점에 타깃 조준선을 배치하고 있을 수 있습니다. 게임플레이 어빌리티는 플레이어가 주문 시전 확인 입력을 히트하는 경우 종료되거나, 주문 확인 없이 애니메이션이 끝날 때까지 대기하는 경우 종료될 수 있습니다. 어빌리티 태스크는 언제든 자체적으로 종료될 수 있지만, 아무리 늦어도 메인 어빌리티가 종료될 때는 반드시 종료됩니다.
<aside> 📌
어빌리티 태스크는 네트워크 환경과 비네트워크 환경에서 모두 사용하도록 설계되었지만, 네트워크에서 직접 자체적으로 업데이트되지는 않습니다. 일반적으로 어빌리티 태스크는 (리플리케이트하는) 게임플레이 어빌리티에 의해 생성되며, 실행 흐름을 결정하기 위해 플레이어 입력이나 네트워크 기반 변수 등 리플리케이트된 정보를 사용하기 때문에 간접적으로 동기화 상태를 유지합니다.
</aside>
블루프린트에서 구현된 근접 공격 게임플레이 어빌리티. 중앙의 'Play Montage and Wait for Event' 어빌리티 태스크는 ActionRPG 샘플의 일부입니다.
<aside> 📌
UE4 프로젝트에서 이를 구성하는 방법은 ARPG의 근접 어빌리티 문서를 확인하세요.
</aside>