언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

GameplayAbility - 1) Gameplay Ability에 대하여

monstro 2025. 8. 8. 12:13
728x90
반응형

- 개요

Gameplay AbilityGAS 프레임워크에서 스킬이나 능력을 구현하는데 사용한다

Gameplay Ability를 사용하기 위해서는 2가지 방식으로 ASC에 부여되어야 하는데, 다음과 같다

  • Granted : 시스템에 의해 자동으로 부여되는 Gameplay Abiltiy에 사용
    • 예시) 레벨업에 따라 자동으로 부여되는 능력을 구현하는 경우
  • Give : 특정한 함수를 호출하여 명시적으로 부여되는 Gameplay Ability에 사용
    • 예시) 플레이어가 스킬을 눌렀을 때, 해당 스킬의 능력을 부여하는 경우

 

Gameplay AbilityASC에 부여되면 내부적으로 서버에서 클라이언트로 Replicate된다

GameplayAbility의 경우 CostCooldown 개념이 존재하여 설계 방식에 맞춰 플레이어가 확장할 수 있다

 

마지막으로, 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에서 ReplicationActivatedOwnTagstrue라면, 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를 사용하여

클라이언트의 입력서버로 전달하는 방식으로 구현하도록 권장한다

728x90
반응형