패스트캠퍼스 환급챌린지 43일차 : RPG 전투 플레이 프로젝트로 배우는 언리얼 엔진 5 게임 개발 강의 후기
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 Unreal Engine의 Gameplay Ability System(GAS)를 활용해 캐릭터의 기본 공격 기능을 구현하는 작업을 진행했다. 지난시간에 작업했던 locomotion을 이용하여 단순히 애니메이션을 재생하고 데미지를 주는 로직을 넘어서, Ability, Effect, AttributeSet을 활용하여 게임 시스템적인 측면에서도 구조화된 형태로 구현했다.
먼저 기본 공격을 Ability 하나로 정의하고, 이를 통해 데미지를 처리하는 구조로 설계했다. UGameplayAbility를 상속받은 클래스에서 공격을 실행했고 캐릭터가 공격을 시작하면 내부적으로 Ability 발동 > 공격 애니메이션 몽타주 재생 > GameplayEffectSpec 생성 > 대상에게 데미지 GameplayEffect 적용순으로 플로우를 작성했다. GAS의 이러한 구조 덕분에 애니메이션과 게임 로직의 분리가 가능해졌고, 나중에 애니메이션을 바꾸더라도 로직을 손대지 않아도 되는 구조를 만들 수 있을 것 같다.
GAS의 기능 중 하나인 SetByCaller를 활용한 데미지 전달 방식이 인상 깊었는데 기존의 하드코딩된 데미지 방식과 달리, Ability 실행 시점에 외부에서 수치를 주입할 수 있었다. 또한, 데미지 적용 대상이 누군지를 명확히 전달하기 위해 소스코드에서 Actor 정보를 함께 넘겼다. GAS시스템을 사용하는 것 만으로 공격 target과 source 정보를 받아올 수 있는 방식이 몹시 새로웠고 편리하다고 느껴졌다.
강의를 들을수록 GAS는 단순한 기능 구현을 넘어서, 유지보수성과 확장성 면에서 매우 뛰어난 구조라고 생각된다. 예전에는 공격할 때마다 타이밍, 대상, 수치를 따로 관리해야 했다면, GAS를 이용하면 체계적인 틀 안에서 처리할 수 있었다. 초반 진입장벽은 다소 있는 편이다. AbilitySystemComponent가 어떻게 작동하는지, Effect와 AttributeSet이 어디서 서로 연결되는지를 파악하는 데 시간이 걸린다. 이 부분은 강의를 여러 번 돌려보면서 익숙해져야 될 것 같다.
Abit.ly 다운받기
abit.ly