내일배움캠프 81일차 - 언리얼 C++ 심화: GAS (Game Ability System) - 1 [개요, GameplayAbility]

GAS

대미지를 계산할때 단순히 체력을 줄이는 것은 쉽지만, 속성 대미지나 방어력 계산, 도트 대미지 타이머 관리 등을 넣기 시작하면 명령줄과 변수도 많아져 코드가 복잡하고 지저분해지기 시작한다.

이때 이 복잡성을 줄이기 위해 도입된 시스템으로, 온갖 오브젝트에 Tag를 붙여 분류해두고, Tag에 따라 대미지를 계산하거나 조건을 붙여 어떤 스킬의 발동 가능 유무판별 등을 간단히 요약할 수 있다. (Tag를 상태효과처럼 씀)

계산이 복잡해지는 코드에는 GAS를 도입해 간소화할 수 있고 또 현업에서 많이 쓰이지만, GAS 자체에 배울 기능이 많아 간단한 프로젝트에 GAS를 도입하면 오히려 코딩 난이도가 높아질 수 있다는 점을 들어 도입 시 주의가 필요하다.

GAS 사용 시 대체되는 특징

 - Bool → Tag
 - 변수 저장 → Attribute Set
 - 변수 수치 변경 → Gameplay Effect
 - 스킬 → Gameplay Ability
 - 사운드 및 이펙트 → Gameplay Cue

GAS 적용법

플러그인 적용 시 사용 가능

프로젝트.Build.cs 코드

GAS 기반 캐릭터 헤더 세팅

태그 변경 방법 3가지

 - 폴더: 'Config → DefaultGameplayTag.ini'에서 직접 수정
 - 프로젝트 세팅: '게임플레이 태그'에서 수정
 - GameplayAbility 디테일창: 직접 변경

GameplayAbility (GA)

오브젝트에 대해 능력을 추가해준다. 주로 Tag의 영향의 받아 사용된다.

GA는 위의 Tag들을 토대로 스킬 사용이 결정된다.

Tag주로 블루프린트를 사용해 추가하며, C++로는 드물게 추가하므로 참고만 해두는 것이 좋다.

Tag를 추가하는 방법. 콤마(.)를 붙여서 하위 카테고리를 만든다.

GA 클래스 속성 - 인스턴싱 정책

Non Instanced
 - 이 스킬을 위해 별도로 인스턴스를 만들지 않고 이 원본 하나로 모두를 돌려쓴다.
 - 단순한 스킬에 많이 사용된다.

Instanced Per Actor
 - 캐릭터마다 이 스킬의 인스턴스를 만들고 죽거나 사라질 때 까지 유지한다.
 - 쿨타임 관리, 스택 쌓기 등 상태를 기억해야 할 때 쓴다.

Instanced Per Execution
 - 스킬이 발동될 때마다 매번 새로운 인스턴스가 만들어진다.

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁