UnrealEngine/언리얼

[UE5] GAS / GameplayAbility 게임플레이 어빌리티

H프레임 2023. 4. 14. 15:50

 

GameplayAbility

 

https://docs.unrealengine.com/5.0/ko/using-gameplay-abilities-in-unreal-engine/

 

게임플레이 어빌리티

Gameplay Ability 클래스 개요입니다.

docs.unrealengine.com

 

 

게임에서 어떠한 능력, 행동 등 다양한 것을 어빌리티로 정하고 그걸 GameplayAbility로 구현할 수 있다. 언리얼 Lyra 프로젝트에서는 LyraAbilitySet.h에 데이터화 하여 관리하는 방식을 택한것 같은데, 이건 아직 보는 중이니 넘어가겠다.

 

Lyra에서는 Jump를 GameplayAbility로 구현해두었다. 게임플레이 어빌리티는 자체 리플리케이트도 가능하고 RPC 호출도 가능하다. 단, 리플리케이트를 사용하기 위해서는 GameplayAbility에 Replication Policy를 Replicate로 설정해주어야 한다.

 

 

 

 

 

GameplayAbility 부여 및 실행

 

Ability를 사용하려면, AbilitySystemComponent에 Ability를 부여해야한다. 실행또한 AbilitySystemComponent에서 할 수 있다. 예를들어 A캐릭터가 Pistol 무기를 얻었다고 가정해보자. 그럼 이 때 Pistol에는 GameplayAbility_Fire, GameplayAbility_Reload의 Ability를 사용할 수 있다면, 이걸 어떻게 사용하도록 할 수 있을까?

 

 

FGameplayAbilitySpecHandle UAbilitySystemComponent::GiveAbility(const FGameplayAbilitySpec& Spec)

AbilitySystemComponent 클래스의 GiveAbility 함수로 Ability를 우선 등록해야한다. GiveAbility를 서버에서 해주면, Property Replication되어 클라에서도 동기화 된다는 것을 알 수 있다.

 

 

 

 

GiveAbility로 GameplayAbility_Fire과 GameplayAbility_Reload Ability를 AbilitySystemComponent에 세팅했다면, Pistol 무기를 갖고있는 동안 AbilitySystemComonent에서 Ability를 실행할 수 있게된다.

 

 

이제 부여했으니 실행을 시켜보자.

UAbilitySystemComponent 클래스에 아래의 함수들이 있다.

 

Tag로 실행할 수도 있고,Class로 실행할 수도 있으며 Handle을 만들어서 실행할 수도 있다. 실패하면 false를 뱉을 것이므로 예외처리하기에도 좋다.

 

GameAbility블루프린트에서 Tag를 세팅해줬다면, 

Tag로 실행할 수도 있다.  이것 또한 Lyra 프로젝트에서 발췌했다. 

 

TryActivateAbilitiesByTag 함수로 어빌리티 실행을 요청하면, UGameplayAbility::ActivateAbility 함수를 실행하게 되어있다.

(서버,클라 모두 실행됨)

 

NetExecutionPolicy로 세팅하면 서버만, 혹은 Local만 도 세팅할 수 있긴하다.

 

 

 

UGameplayAbility.h에 주석으로 중요한 함수들이라며 나열되어있는 것들이 있다. 

 

 

좀 더.. 알아보자..