UnrealEngine/언리얼

[UE5] GAS / AbilitySystemComponent 겉핥기

H프레임 2023. 4. 17. 18:19

 

GameplayAbility와 관련된 클래스, 기능등을 사용하기 위해서 먼저 플러그인을 추가해야한다.

 

 

 

플러그인에서 Ability를 검색하면 GameplayAbilities가 있는데 체크 후 지금 재 시작을 눌러 에디터를 실행해주자.

 

 

 

C++ 클래스를 새로 추가해보면 AbilitySystemComponent가 검색에 뜨는 것을 볼 수 있다.

 

 

또한 "프로젝트명.Build.cs" 파일에서 PrivateDependencyModuleNames.AddRange를 통해 사용할 모듈을 추가해주어야 한다.

 

추가하지 않으면 아래와같은 에러를 뱉어낸다.

 

 

 

 

 

AbilitySystemComponent

 

https://docs.unrealengine.com/5.0/en-US/gameplay-ability-system-component-and-gameplay-attributes-in-unreal-engine/

 

Ability System Component And Attributes

Using the Ability System Component with Gameplay Attributes and Attribute Sets

docs.unrealengine.com

 

 

AbilitySystemComponent는 액터와 어빌리티 시스템을 잇는 다리역할을 한다고 나와있다. GAS를 사용하기 위해서는 액터가 AbilitySystemComponent를 소유하고 있어야하며, 다른 액터의 어빌리티에 접근하기 위해서도 마찬가지로 AbilitySystemComponent을 통해 접근해야한다.

 

어빌리티를 실행하고 , 스탯을 변경하기 위해 Effect를 실행하는 것등의 행위를 AbilitySystemComponent에서 처리하도록 되어있다.

 

 

AbilitySystemComponent에 GiveAbility라는 함수를 이용해서 현재 AbilitySystemComponent에 Ability를 추가할 수 있고,

 

 

TryActivateAbility...

 

Class, Tag, AbilitySpecHandle을 이용해 현재 Ability가 존재하면 실행하도록 요청하는 함수도 존재한다.

 

물론 CancelAbility도 있다.

 

 

 

GameplayEffect를 적용하는 함수도 찾았다.

Target에 적용할 수도 있고, self에 적용할수도 있다. 

 

 

 

언리얼에서 사용하는 방식은?

 

공식 문서에서 GameplayAbility System을 사용하려는 액터는IAbilitySystemInterface를 상속받으라고 되어있다.

 

virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;

 

 

 

 

인터페이스를 상속받아 위의 함수를 재정의하라는 것인데, 아마 Ability를 실행했을 때 Ability에서는 ActorInfo를 통해 Actor를 알 수 있고, 그 Actor에서 AbilitySystemComponent 존재 유무 파악을 하면 GameplayEffect 등을 적용하는 등의 플로우를 사용할 수 있는 형태인 것으로 보인다.

 

 

라이라 프로젝트를 조금 더 봐야겠지만, 프로젝트를 열어 GA_ 접미사를 찾으면 라이라의 Ability를 찾을 수 있다. 라이라를 활용해서 내가 생각하는대로 구현이 되도록 해봐야겠다.