https://dev.epicgames.com/documentation/ko-kr/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.3

 

언리얼 엔진의 게임플레이 어빌리티 시스템 | 언리얼 엔진 5.4 문서 | Epic Developer Community

게임플레이 어빌리티 시스템 개요

dev.epicgames.com

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/understanding-the-unreal-engine-gameplay-ability-system?application_version=5.3

 

언리얼 엔진 게임플레이 어빌리티 시스템을 살펴봅니다. | 언리얼 엔진 5.4 문서 | Epic Developer Commu

게임플레이 어빌리티 시스템 및 각 컴포넌트 클래스가 어빌리티에 기여하는 방법을 살펴봅니다.

dev.epicgames.com

Gameplay Ability란?

  • RPG나 MOBA의 Ability, Attribute 구축을 지원하는 고도로 유연한 Framework
  • 다양한 인게임 Ability를 설계, 구현하고 효과적으로 연결할 수 있도록 기능을 지원
    • Action의 결과로 다양한 Attribute를 조절하거나 Effect를 생성
    • Timer나 자원 비용을 구현하여 Action의 빈도 조절
    • Ability의 Level과 그에 따른 Effect 변경
    • Particle 및 Sound Effect를 활성화
    • 점프와 같은 단순한 Action 기능
  • Gameplay Ability System과 상호작용하는 Actor에는 Ability System Component가 있어야 한다.
    • Ability를 활성화
    • Attribute 저장
    • Effect Update
    • Actor간 상호작용 처리
  • Game Ability System을 생성하고 Ability System Component가 있는 Actor를 생성하면
    Ability를 생성하고, Actor가 Ability에 어떻게 반응하는지 결정할 수 있다.

Gameplay Ability

  • UGameplayAbility를 상속받은 Class나 BP들을 지칭
    • 특정 Ability에서 어떤 역할을 하는지 정의
    • 해당 Ability의 Replication과 Instancing Activity와 같은 요소가 어떻게 처리될지 정의

Ability Task

  • Gameplay Ability에서 호출하는 일련의 비동기 구성 요소
    • UAbilityTask Class를 상속 받음.
  • C++로 작성된다.
  • 작업이 끝날 때 cpp의 Delegate나 BP의 출력 실행 핀을 호출한다.

Gameplay Attribute

  • FGameplayAttribute 구조체에 저장되는 float 값
    • Game이나 Actor에 특정한 방식으로 영향을 미치는 값들
  • 캐릭터의 health, power, jump height 등의 수치들이 이에 해당한다.

Gameplay Effects

  • Gameplay Attribute를 변경하는 수단
    • 즉시 변경할 수도 있고, 일정 시간동안만 변경할 수도 있다.
    • 후자는 버프/디버프

Owner Tracking

  • Ability와 Effect는 "Owner"라는 개념을 유지해야 한다.
    • Effect가 계산을 수행할 때에는 Owner가 누구인지 알아야 Attribute를 사용할 수 있다.
  • 이 때 Owner는 Network Replication의 것과 다르다.

State Tracking

  • Ability는 다음과 같은 State 순환을 Tracking 할 수 있어야 한다.
    • Ability가 활성화 된 시점
    • Ability의 실행이 현재 진행중인 시점
    • Ability가 완전히 완료되고 더 이상 활성화되지 않은 시점

실행 조정하기

  • Ability는 실행 도중 특정 타이밍에 System과 다양한 Interaction을 할 수 있어야 한다.
    • Animation Montage 활성화
    • Character의 Movmenet를 일시적으로 제어
    • Visual Effect Trigger
    • Overlap 및 Collision Effect 수행
    • 일시적 혹은 영구적으로 Attribute 변경
    • 인게임 Resource 증감
    • 다른 Ability 활성화 허용 또는 차단
    • Ability 사용을 제한하기 위한 쿨다운 처리
    • 인게임 Evnet에 의한 중단
    • 진행 중인 다른 Ability 취소
    • Character의 주요 State 변경사항 적용
      • 새로운 MovementMode 활성화
    • 다른 Interaction 도중 입력에 반응
    • UI에 Ability의 인게임 상태 전달

시스템 구성

  • Edit -> Plugin에서 Gameplay Abilities를 검색해 활성화, Editor 재시작
  • [MyProjectName].Build.cs에 다음 항목 추가
    • GameplayAbilities
    • GameplayTags
    • GameplayTasks

Various Components of Gameplay Ability System

Owner Tracking

  • Gameplay Ability를 사용하기 위해서는 Ability System Component를 Actor에 Attach해야 한다.
  • Ability System Component는 다음 기능을 제공한다.
    • Actor에 Ability 추가/제거
    • Actor가 소유한 Ability가 무엇인지 지속적으로 Tracking, 활성화
    • Ability system의 Context에서 소유 Actor를 나타내는 주요 수단
    • 다양한 요소를 Tracking하기 위한 System과 소유 Actor에 직접 Access하기 위한 Interface 제공
      • Attribute
      • 진행중인 Effect
      • Gameplay Tag
      • Gameplay Effect
  • Multiplayer Game 환경에서 Ability System Component는 다음 기능또한 제공한다.
    • Client 정보 Replicate
    • Server에 Player Action 전달
    • Client가 Ability System Component의 State를 변경 할 권한이 있는지 확인
  • Ability System Component의 부모 Actor는 원격 활성화를 수행하기 위해 로컬에서 제어되는 Player가 소유해야 한다.

Ability 활성화 및 실행 처리

  • Gameplay Ability는 Ability의 모든 Event를 실행하는 것을 담당하는 BP Object이다.
    • Animatino 재생
    • Effect Trigger
    • Owner로부터 Attribute 가져오기
    • Visual Effect 표시

Ability 활성화 제어

  • Gameplay Ability를 활성화 할 경우 System은 Ability가 진행중인 것으로 인식
  • 이후 활성화 Event에 Attach 된 Code를 실행해 완료 함수를 호출
    • Ability의 실행이 완료됨을 알리기 전까지 각 함수와 Gameplay 작업을 거쳐 이동
  • 정리 작업을 추가로 징행해야 하는 경우 완료 시 Event에 Code를 추가로 Attach 할 수 있다.
  • Ability를 취소하여 실행을 중단할 수 있다.
  • Gameplay Ability는 Gameplay Tag를 사용하여 실행하는 것을 제한한다.
    • 모든 Ability는 활성화 될 때까지 2가지 Tag 목록을 가지고 있는다.
      • 소유 Actor에 추가하는 Tag 목록
      • 활성화를 차단하거나 Ability를 자동으로 취소하는 Tag 목록
  • 자체 Code로 Ability 실행을 수동을 취소/차단/허용 할 수 있다.
  • Gameplay Ability는 다음 4가지 방법을 통해 활성화 할 수 있다.
    • Gameplay Ability Handle
      • BP나 C++에서 Ability를 명시적으로 활성화
      • Ability가 부여될 때 Ability System Component에 의해 제공 됨
    • Gameplay Event
      • 일치하는  Ability Trigger로 모든 Ability를 실행
      • Input/Define Machanism을 추상화해야 하는 경우에 유연성 극대화를 위해서는 이 방식을 적극 권장 함
    • 일치하는 Tag와 함께 Gameplay Effect
      • 일치하는 Ability Trigger로 모든 Ability 실행
      • GamePlay Effect의 Trigger Ability를 끄려는 경우 선호 됨
      • 비활성화 된 Animation을 재생하고 다른 Game Action을 차단하는 Ability를 Trigger하는 Sleep Deburf
    • Input Code
      • Ability system Component에 의해 추가 됨
      • 호출 시 일치하는 모든 Ability Trigger
      • Gameplay Event와 유사

Ability 실행 제어

  • Gameplay Ability는 일반적으로 사용되는 다양한 사용 사례와 기능을 제공
    • Cooldown
    • Resource 비용 할당
    • Animation
    • 기타 일반적인 Unreal Engine System을 처리하는 Preprocessed Gameplay Ability Working Library
  • 표준 BP Function Node가 실행을 즉시 종료할 때 상태를 계속 Tracking 하며 도중에 다른 Event를 실행
  • 부모 Gameplay Ability가 적절하게 취소되고 정리되었는지 Tracking 가능
  • Game에서 Gameplay Ability 작업을 확장해 Custom Gameplay Logic 구현하는 것이 일반적인 용례이다.
  • 소유 Actor에서 Gameplay Tag와 Event Data Struct를 수신하기 위해 대기하는 Gameplay Event에 응답 가능.

Attribute Set 및 Attribute

  • Gameplay Attribute System은 Attribute로 구성된 Attribute Set를 통해 Actor와 Interact한다.
    • Attribute Set은 계산에 사용되는 소수값으로, 보통 핵심 통계값을 Tracking 하는데 사용된다.
  • 기본 변수 대비 Gameplay Attribute 사용을 했을 시 얻는 이점이 몇가지 있다.
    • System을 Build할 수 있는 일관적이고 재사용 가능한 Attribute Group을 제공
    • Reflection을 통해 Access 할 수 있어 BL Editor에서 간단한 계산과 Effect 생성 가능
    • Default/Current/Max Value를 별도로 Tracking해 일시적인 수정 및 지속적인 Effect를 쉽게 생성
    • 값을 Client에 Replicate해 UI 시각화에 안전함
  • Actor에서 Gameplay Ability를 사용하려면 Ability System Component에 Attribute Set을 추가해야 한다.
    • 그러면 Ability System Component는 Attribute Set에 할당된 Attribute에 Access할 수 있게 된다.

Gameplay Effect 처리

  • Gameplay Ability System은 Gameplay Effect를 사용해 Target Actor에 변경사항을 적용한다.
    • Damage 적용
    • 지속되는 Effect를 적용하는 One-shot Effect
      • 이 경우에 Gameplay Effect는 제거될 때까지 Target Actor에 자신을 Attach한다.
      • 만료되거나 정리되기 전까지로 제한된 수명을 미리 설정 할 수 있다.
      • 혹은 Target Actor의 Gameplay attribute에 적용된 변경사항을 실행 취소할 수도 있다.
  • Gameplay Effect는 Attribute에 기반하여 계산을 한다.
    • BP Editor에서 간단하게 계산을 직접 생성할 수도 있다.
    • 하지만 복잡한 로직을 가지고 있고,
      다수의 Attribute에 동시에 영향을 미치는 Custom Effect 계산은 C++로 작업하는 것이 적절하다.
  • 보통 Gameplay Ability의 Owner Actor와 Target Actor 모두에서 정보를 처리할 수 있다.
    • 그렇기에 일반적으로 계산을 재사용이 가능한 코드로 결합할 수 있다.

Cosmetic Effect 처리

  • Gameplay Queue는 Visual Effect와 Sound Effect 실행을 담당하는 Actor 및 UObject이다.
    • Multiplay Game에서는Cosmetic Feedback을 Replicate하는데 선호되는 Method이다.
    • 생성할 때 Event Graph 내에서 재생할 Effect를 위한 Logic을 실행
    • 일련의 Gameplay Tag와 연관될 수 있으며, 일치하는 Gameplay Effect를 자동으로 적용한다.
  • Gameplay Queue는 신뢰할 수 있는 Replication을 사용하지 않는다.
    • 때문에 일부 Client가 Queue를 수신하지 못하거나, Feedback을 표시하지 못하는 경우가 있다.
  • Gameplay Code와 결합되어 있는 경우 이 때문에 동기화가 해제될 수 있다.
    • 따라서 Gmaeplay Queue는 Cosmetic Effect에서만 사용되어야 한다.
  • 모든 Client가 Replicate 되어야 하는 경우에는 Replication 처리를 위해 Ability 작업에 의존해야 한다.
    • Montage 재생 Ability 작업이 이에 적합한 예시이다.

Network Multiplay

Ability System Component 및 Replication

  • Ability System Component가 모든 Component에 전체 State를 Replicate하면 안된다.
    • 대역폭 절약 및 부정행위 방지 목적
  • 모든 Client에 Ability와 Gamplay Effect를 Replicate하면 안된다.
    • 영향을 받는 Gameplay Attribute와 Tag만 Replicate 해야 한다.

Ability Replicate 및 Prediction 사용

  • Network Game의 Ability 대부분은 Server에서 실행되고 Client로 Replicate되어야 한다.
    • 이로 인해 Ability 활성화에 지연이 발생하는 것은 일반적인 현상이다.
  • 만약 빠른 속도로 진행되어야 하는 Multiplay Game의 경우 Ability를 Local로 활성화 하고,
    그 사실을 Server에 전달해 동기화 하는 방식을 사용한다.
  • Server가 Ability 활성화를 거부하는 경우 Local로 적용한 변경사항을 실행 취소해야 한다.
    • 일부 Gameplay Effect의 경우 Server에 의해 거부된 경우에 대한 롤백 기능을 지원한다.
    • 대부분의 즉각적이지 않은 Gameplay Effect가 포함된다.
    • Damage나 즉각적인 기타 Attribute/Tag 변경사항은 제외된다.

Server가 소유한 Object와 Interact 하기 위한 Ability 사용

  • Gameplay Ability는 Bot, NPC, Server 소유의 기타 Actor 및 Object와의 Interact를 처리할 수 있다.
    • 이는 Local 소유의 Actor(Player/Pawn), Replicated Ability, 비 GAS Server RPC를 통해 수행되어야 한다.
    • 위 호출은 Interaction을 Server에 Replicate한 다음 NPC와의 변경사항을 수행하는 권한을 가진다.

'UE5 > GAS' 카테고리의 다른 글

[GAS] Ability Task  (0) 2024.05.16
[GAS] Gameplay Effect  (0) 2024.05.15
[GAS] Attribute Set  (1) 2024.05.14
[GAS] Gameplay Attribute  (0) 2024.05.13
[GAS] Ability System Component  (0) 2024.05.13

+ Recent posts