
해당 글은 https://github.com/tranek/GASDocumentation 의 설명을 한글로 번역 후 첨언 및 요약 해 나 보려고 내 입맛대로 작성한 글이다.
GAS라는 것은 이 GameplayAbilitySystem의 줄임말로 Ability(능력 및 플레이어의 행동 스킬을 의미)와 Attribute(플레이어의 스탯 및 상태 등을 의미)를 관리할 때 높은 유연성을 보장해주는 프레임워크 플러그인 이라고 할 수 있다. (그래서 RPG나 MOBA 장르에서 사용해보기를 권장한다)
해당 프레임워크를 통해서 플레이어에게 특정 액션(행위)나 패시브 스킬을 사용할 수 있게하고 상태 이상 관리나 특정 Attribute(스텟 및 체력 마나 등)의 소모와 그 소모에 대한 SideEffect등을 관리하고, 특정 Ability에 대한 쿨타임 관리를 하는 것에도 유용하다.
레벨이나 스텟 등에 따라 이펙트, 사운드, 애니메이션 을 GAS에서 관리해주는 즉 복잡하고 다양한 기능을 관리하지만 쉽게 사용하고 추가할 수 있는 이점이 있고, 네트워크에 대한 지원도 있기에 멀티 플레이 게임에서도 사용할 수 있다.
이 GAS 프레임워크는 EpicGames의 시그니쳐 게임이라고 할 수 있는 Paragon과 Fortnite에서 이미 입증이 되었기에 걱정없이 사용해도 무방하다고 할 수 있다. (요새는 한국 현업에서도 사용하기 시작하는 모습이 보인다)
GAS 플러그인은 한번 설치 이후 별도의 추가적인 설치나 구성 없이(이것을 영어로 out-of-the-box 라고 말한다) 싱글 및 멀티 플레이어 게임을 구축하는데 필요한 솔루션들을 제공해준다.
GAS을 이용해 멀티플레이어 게임을 만드는 경우 Client Side Prediction(클라이언트 관점의 예측 기능)을 제공한다.
게임 서버 프로그래밍에서 사용되는 개념으로 서버가 지연 시간이 길어질 때 게임 플레이에 부정적인 영향을 끼치지 않게하는 기법으로 클라이언트 측에서 예측 프로세스를 만들어 서버가 입력을 listen하고 상태를 업데이트 해 전달하기 이전에 클라이언트 측에서 먼저 사용자 입력에 대해 반응하는 것을 말한다.
웹 관점에서도 서버 네트워크 지연을 방지해 좋아요 같은 기능에 대해 낙관적 업데이트(API 호출과는 별개로 좋아요를 누르면 우선 눌러진 것 처럼 보여주고 후에 서버 반응에 따라 다시 설정해주는 것)라는 것을 제공하는데 해당 방식도 위와 동일한 기능을 한다고 생각하면 편할 것 같다.
CharacterMovementComponent에 RootMotionSource 함수를 통한 이동 기능 연동. 즉 서버 반응에 따른 움직임 이전에 동작하게 설정GAS는 반드시 C++ 기반으로 세팅이 되어야 한다. 다만 GameplayAbility와 GameplayEffect의 경우는 Blueprint로도 제작이 가능하다. 이말은 즉슨 C++ 기반의 프로젝트에서 GAS의 기본을 세팅하고 이후 추가적인 능력이나 반응에 대한 것들은 Blueprint로도 연동이 가능하다라는 것을 말한다.
세팅 자체가 어렵지는 않다. 의외로 간단한데 다음과 같은 작업을 하면 된다.
GameplayAbilitySystem을 다운 받는다. (2번 하기 전에 1번을 하고 하는게 훨씬 편할 것이다)[프로젝트명].build.cs에서 "GameplayAbilities", "GameplayTags", "GameplayTasks" 총 3가지 옵션을 PrivateDependencyModuleNames에 추가하는 작업이 필요하다.UAbilitySystemGlobals::Get().InitGlobalData()로 먼저 글로벌 데이터 초기화 작업이 필요하다. tranek에서 제공한 샘플 프로젝트 (위의 깃헙 링크)에서는 UAssetManager::StartInitialLoading() 즉 별도의 에셋 매니저를 통해 초기화를 진행하였다. 5.3 버전 이상의 경우는 해당 기능이 자동으로 실행되기 때문에 세팅할 필요는 없다.참고글