언리얼 개발/탐구(이론)
[UE_5] GAS란 무엇인가 - GameplayAbility
WhNi
2024. 4. 24. 17:11
GameplayAbility는 UObject를 상속받고 있다.
기본적으로 게임플레이의 매커니즘을 위한 자체 로직이라고 보면 된다.
먼저 Ability에 대한 인스턴스Policy를 정해야 하는데,
NonInstanced ( 기본 세팅 ) - 인스턴스 오브젝트 안씀, 클래스 기본 함수 바로 사용 함(런타임에 수정할 일 없음)
InstancedPerActor ( 액터가 인스턴스를 가짐)
InstancePerExecution ( 어빌리티 실행될때만 생성됨) - 그래서 어빌리티 호출전에 인스턴스 생성됨.
이렇게 세가지가 있다.
GiveAbility를 할때, InstancedPerActor일때 어떻게 생성하는지 저번 포스트에 나와있었다.
다음은 NetExecutionPolicy 이다.
네트워크가 언제 어빌리티를 실행하는지. 정하는 규칙이다.
LocalPredicted 는 클라에서 서버로
LocalOnly 는 클라이언트 혹은 서버에 대한 컨트롤을 가지고 있을때
ServerInitated 서버에서 클라로
ServerOnly 는 서버만
(이부분은 언제 제대로 쓰이는지 실제 사례를 드는게 이해가 빠를거 같다)
이 규칙에 따라서 TryActivityAbilityClass를 실행하는 시기가 달라진다.
Ability는 Tag와 주로 상호작용하면서 실행되는데, Ability가 Activate 되기 전에
Tag에 대한 안정성 검사도 실행된다.