게임플레이 어빌리티(Gameplay Ability) 는 UGameplayAbility 클래스에서 파생된 것으로, 게임 내 어빌리티가 하는 일, 사용 비용(있는 경우), 사용할 수 있는 상황 및 시점 등을 정의합니다. 게임플레이 어빌리티는 비동기 실행되는 인스턴스된 오브젝트로 존재할 수 있기에 캐릭터 애니메이션, 파티클과 사운드 이펙트, 플레이어 입력이나 실행 도중 벌어지는 캐릭터 상호작용에 따른 분기처럼 전문화된 다단계 태스크를 실행할 수 있습니다. 네트워크를 통한 자체 리플리케이트나, (클라이언트 측 예측 지원을 포함해서) 클라이언트 또는 서버 머신에서의 실행이나, 심지어 변수 동기화 및 원격 프로시저 콜(Remote Procedure Calls, RPC) 호출도 가능합니다. 또한 쿨다운 및 사용 비용, 플레이어 입력, 애님 몽타주가 있는 애니메이션, 액터에 부여되는 어빌리티 자체에 대한 반응을 구현하는 확장 가능한 함수 기능 등 게임 세션 중에 엔진이 게임플레이 어빌리티를 구현하는 방식에 있어 유연성을 제공합니다.

어빌리티 부여 및 철회

액터가 어빌리티를 사용하기 전에 어빌리티 시스템 컴포넌트에 해당 어빌리티를 부여해야 합니다. 다음 어빌리티 시스템 컴포넌트 함수는 어빌리티에 액세스를 부여합니다.

다음은 어빌리티 시스템 컴포넌트에서 어빌리티에 대한 액세스를 철회하는 함수로, 어빌리티를 부여받았을 때 반환된 FGameplayAbilitySpecHandle 을 사용합니다.

기본 사용

게임플레이 어빌리티가 액터의 어빌리티 시스템 컴포넌트에 부여된 이후의 기본 실행 주기는 다음과 같습니다.

  1. CanActivateAbility 는 호출자가 어빌리티 실행을 시도하지 않아도 어빌리티 사용 가능 여부를 알려줍니다. 예를 들어, 유저 인터페이스에서 플레이어가 사용할 수 없는 아이콘을 회색 처리하여 비활성화하거나, 캐릭터에 사운드 또는 파티클 이펙트를 재생하여 특정 어빌리티를 사용할 수 있음을 표시해야 할 수도 있습니다.
  2. CallActivateAbility 는 어빌리티에 관련된 게임 코드를 실행하지만, 어빌리티의 사용 가능 여부는 검사하지 않습니다. 이 함수는 CanActivateAbility 검사와 어빌리티 실행 사이에 약간의 로직이 필요한 경우에 주로 호출됩니다.
  3. TryActivateAbility 는 어빌리티를 실행하는 전형적인 방식입니다. 이 함수는 CanActivateAbility 를 호출해서 어빌리티를 즉시 실행할 수 있는지 여부를 판단하고, 가능하다면 CallActivateAbility 를 호출합니다.
  4. EndAbility (C++) 또는 End Ability 노드(블루프린트)는 어빌리티 실행을 마치면 어빌리티를 종료합니다. 어빌리티가 취소된 경우 UGameplayAbility 클래스에서 취소 프로세스의 일부로 자동 처리하지만, 다른 모든 경우에는 개발자가 C++ 함수를 호출하거나 어빌리티의 블루프린트 그래프에 노드를 추가해야 합니다. 어빌리티를 정상적으로 종료하지 못하면 게임플레이 어빌리티 시스템은 어빌리티가 아직 실행 중인 것으로 믿으며, 향후 해당 어빌리티 또는 그 어빌리티가 차단한 다른 어빌리티를 사용하지 못하게 될 수 있습니다. 예를 들어 게임에서 체력 회복약 마시기(Drink Health Potion)라는 게임플레이 어빌리티가 정상 종료되지 못한 경우, 해당 어빌리티를 사용하는 캐릭터는 다른 약 마시기, 질주하기, 사다리 오르기 등 체력 회복약 마시기가 방지하는 다른 액션을 취할 수 없게 됩니다. 이러한 어빌리티 차단은 게임플레이 어빌리티 시스템이 캐릭터가 아직 약을 마시는 중이라고 간주하므로 무한히 계속됩니다.

<aside> 📌

언리얼 엔진 프로젝트에서 게임플레이 어빌리티를 구성하는 방법에 대한 자세한 내용은 액션 RPG의 게임플레이 어빌리티를 확인하세요.

</aside>

태그

게임플레이 태그(Gameplay Tag) 는 여러 게임플레이 어빌리티의 상호작용 방식을 결정하는 데 도움이 됩니다. 각 어빌리티에는 어빌리티의 비헤이비어에 영향을 미칠 수 있는 방식으로 어빌리티를 식별 및 분류하는 태그 세트가 있으며, 다른 어빌리티와의 인터랙션을 지원하기 위한 게임플레이 태그 컨테이너(Gameplay Tag Container) 및 게임플레이 태그 쿼리(Gameplay Tag Query)도 있습니다.

게임플레이 태그 변수 목적
태그로 어빌리티 취소(Cancel Abilities With Tag) 이 어빌리티가 실행되는 동안 이미 실행 중인 어빌리티의 태그가 제공된 목록과 일치하면 취소합니다.
태그로 어빌리티 차단(Block Abilities With Tag) 이 어빌리티가 실행되는 동안 일치하는 태그가 있는 다른 어빌리티의 실행을 방지합니다.
활성화 소유 태그(Activation Owned Tags) 이 어빌리티가 실행되는 동안 해당 어빌리티의 오너에 이 태그 세트가 부여됩니다.
활성화 필수 태그(Activation Required Tags) 이 어빌리티는 활성 상태인 액터 또는 컴포넌트에 이러한 태그가 모두 있을 때만 활성화할 수 있습니다.
활성화 차단 태그(Activation Blocked Tags) 이 어빌리티는 활성 상태인 액터 또는 컴포넌트에 이러한 태그가 하나도 없을 때만 활성화할 수 있습니다.
타깃 필수 태그(Target Required Tags) 이 어빌리티는 타깃 액터 또는 컴포넌트에 이 태그가 모두 있을 때만 활성화할 수 있습니다.
타깃 차단 태그(Target Blocked Tags) 이 어빌리티는 타깃 액터 또는 컴포넌트에 이 태그가 하나도 없을 때만 활성화할 수 있습니다.

리플리케이션