- 개요
Gameplay Ability는 GAS 프레임워크에서 스킬이나 능력을 구현하는데 사용한다
Gameplay Ability를 사용하기 위해서는 2가지 방식으로 ASC에 부여되어야 하는데, 다음과 같다
- Granted : 시스템에 의해 자동으로 부여되는 Gameplay Abiltiy에 사용
- 예시) 레벨업에 따라 자동으로 부여되는 능력을 구현하는 경우
- Give : 특정한 함수를 호출하여 명시적으로 부여되는 Gameplay Ability에 사용
- 예시) 플레이어가 스킬을 눌렀을 때, 해당 스킬의 능력을 부여하는 경우
Gameplay Ability는 ASC에 부여되면 내부적으로 서버에서 클라이언트로 Replicate된다
GameplayAbility의 경우 Cost와 Cooldown 개념이 존재하여 설계 방식에 맞춰 플레이어가 확장할 수 있다
마지막으로, Ability Task라는 요소가 존재한다
Task를 사용하여 GA의 실행 중에 비동기 작업을 수행할 수 있는데,
이를 통해 어빌리티가 여러 프레임에서 실행되고, 동일 프레임에서 여러 개의 다른 기능을 수행할 수 있게 한다
1) GA에 관한 설정 - Tag

Gameplay Ability에는 위와 같은 Tag와 관련된 여러 설정 사항이 존재한다
각각 다음과 같다
- Ability Tags : 해당 어빌리티가 갖는 태그
- Cancel Abilities with Tag : 해당 어빌리티가 실행되면, 설정한 태그를 가진 어빌리티는 Cancle됨
- Block Abilities with Tag : 해당 어빌리티가 활성화되어 있는 동안, 설정한 태그를 가진 어빌리티를 막음
- Activation Owned Tags : 해당 어빌리티가 활성화되어 있는 동안, 동작중인 소유자에게 부여할 태그
- AbilitySystemGlobals에서 ReplicationActivatedOwnTags가 true라면, Replicate함
- Activation Required Tags : 사용하는 대상이 설정한 모든 태그를 반드시 가져야 해당 어빌리티를 활성화
- Activation Blocked Tags : 사용하는 대상이 하나라도 설정한 태그를 갖고 있다면 해당 어빌리티를 막음
- Source Required Tags : Source Object가 설정한 모든 태그를 반드시 가져야 해당 어빌리티를 활성화
- Source Blocked Tags : Source Object가 하나라도 설정한 태그를 갖고 있다면 해당 어빌리티를 막음
- Target Required Tags : Target Object가 설정한 모든 태그를 반드시 가져야 해당 어빌리티가 동작
- Target Blocked Tags : Target Object가 하나라도 설정한 태그를 갖고 있다면 해당 어빌리티를 막음
2) GA에 관한 설정 - Gameplay Ability 인스턴싱 정책

Gameplay Ability를 실행하면 해당 어빌리티 타입의 인스턴스가 생성되어 작업을 수행한다
따라서 인스턴스화 정책을 설정하여 효율적으로 인스턴스를 만들도록 설정할 수 있다
구성은 다음과 같다
- Non-Instanced : 가장 효율적인 인스턴싱 정책
- 인스턴스를 생성하지 않고, GA의 CDO를 사용
- CDO를 사용하므로 내부적으로 상태를 저장할 수 없고, Task에 바인드할 수 없음
- 따라서 내부적인 변수 저장과 데이터 리플리케이션이 필요 없는 어빌리티에만 사용하는 것이 권장
- Instanced per Actor : 두 번째로 호율적인 인스턴싱 정책
- GA를 최초로 실행하면 인스턴스를 생성하고, 이후 해당 인스턴스를 재사용
- 상태를 기록할 수 있으므로 지속되는 데이터를 저장하기에 좋음
- 그러나 사용할 때마다 변수를 리셋해야 함
- 대규모 전투와 같은 레플리케이션이 빈번한 상황에서 매우 이상적임
- Instanced per Execution : 마지막 인스턴싱 정책
- GA가 실행될 때마다 인스턴스를 생성
- 실행할 때마다 디폴트 값으로 초기화되므로 간단하게 구현할 수 있음
- 또한 블루프린트 그래프와 멤버 변수를 자유롭게 사용할 수 있음
- 그러나 매번 인스턴스를 생성하므로 부하가 발생
- 따라서 자주 사용하지 않는 궁극기와 같은 어빌리티에서 사용하는 것이 권장
3) GA에 관한 설정 - Net Execution Policy

멀티플레이어 게임에서 리플리케이트하는 어빌리티의 리플리케이션 처리 방식을 설정할 수 있는데,
Net Execution Policy에서 이를 설정할 수 있다
구성은 다음과 같다
- Local Predicted : Gameplay Ability는 클라이언트에서 먼저 동작하고, 서버에서 이어서 동작함
- 서버에서는 예측을 통해 값을 보정함
- 클라이언트에서 보낸 값이 Invalid하다면, 서버는 보낸 값을 롤백할 수 있음
- Local Only : Gameplay Ability는 오직 클라이언트에서만 동작하도록 설정
- Server Initiated : Gameplay Ability는 서버에서 먼저 동작하고, 로컬 클라이언트에서 동작함
- Server Only : Gameplay Ability는 오직 서버에서만 동작하도록 설정
4) Gameplay Ability를 다루는 경우의 유의 사항
4 - 1) Replication Policy 설정

설정사항 중에서 Replication Policy는 사용하지 않는 것이 좋다
Gameplay Ability는 이미 내부적으로 서버에서 소유한 클라이언트로 레플리케이션하도록 설정되어 있다
4 - 2) Server Respects Remote Ability Cancellation 설정

클라이언트에서 어빌리티가 취소되면 서버에서도 강제로 해당 어빌리티를 종료시키는 기능이다
해당 옵션은 서버가 중심이 되어 판단하고 처리하는 멀티 플레이어 게임의 원칙을 훼손하고
또 클라이언트와 서버간의 지연 시간에 따른 문제를 발생시키므로 가급적 사용하지 않는 것이 좋다
4 - 3) Replicate Input Directly 설정

클라이언트에서 입력 처리 / 해제와 관련한 이벤트를 항상 서버에 레플리케이트하는 기능이다

에픽 게임즈에서는 해당 옵션을 사용하기 보다는 Generic Replicated Events를 사용하여
클라이언트의 입력을 서버로 전달하는 방식으로 구현하도록 권장한다
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| GameplayAbility - 3) Lyra의 입력 시스템 도입 (0) | 2025.08.09 |
|---|---|
| GameplayAbility - 2) Gameplay Ability 적용 (0) | 2025.08.08 |
| 스탯창 UI - 최종) 스탯창 UI와 AttributeSet의 연동 (0) | 2025.08.03 |
| 스탯창 UI - 3) AttributeInfo 데이터애셋 클래스와 BlueprintFunctionLibrary 클래스 (0) | 2025.08.01 |
| 스탯창 UI - 2) Native한 GameplayTag + AssetManager (0) | 2025.08.01 |