내일배움캠프 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 코드 |
태그 변경 방법 3가지
- 폴더: 'Config → DefaultGameplayTag.ini'에서 직접 수정- 프로젝트 세팅: '게임플레이 태그'에서 수정
- GameplayAbility 디테일창: 직접 변경
GameplayAbility (GA)
GA는 위의 Tag들을 토대로 스킬 사용이 결정된다.
Tag는 주로 블루프린트를 사용해 추가하며, C++로는 드물게 추가하므로 참고만 해두는 것이 좋다.
| Tag를 추가하는 방법. 콤마(.)를 붙여서 하위 카테고리를 만든다. |
GA 클래스 속성 - 인스턴싱 정책
Non Instanced
- 이 스킬을 위해 별도로 인스턴스를 만들지 않고 이 원본 하나로 모두를 돌려쓴다.
- 단순한 스킬에 많이 사용된다.
Instanced Per Actor
- 캐릭터마다 이 스킬의 인스턴스를 만들고 죽거나 사라질 때 까지 유지한다.
- 쿨타임 관리, 스택 쌓기 등 상태를 기억해야 할 때 쓴다.
Instanced Per Execution
- 스킬이 발동될 때마다 매번 새로운 인스턴스가 만들어진다.
댓글
댓글 쓰기