이번 강의 목표
- Gas 플러그인을 활성화하고 어빌리티 시스템 컴포넌트(ASC) 를 초기화하여 GAS의 기본 설정을 진행하는 방법을 학습.
- 액터 간의 상호작용을 위한 Game Ability와 Gameplay Tags 설계 방법을 학습
- 핵심 컴포넌트를 활용하여 간단한 기믹(Gimmick)레벨을 제작하는 방법을 학습
어빌리티 시스템 컴포넌트 개요
- 어빌리티 시스템 컴포넌트(ASC)는 게임플레이 어빌리티 시스템(GAS) 전체를 관리하는 핵심 컴포넌트
- 게임 플레이 어빌리티와 관련 연산을 처리하는 중앙 처리 장치(CPU)와 같은 역할을 수행한다.
- 하나의 액터에는 하나의 ASC만 부착이 가능하며, ASC를 붙은 액터를 GAS액터라고 부른다.
- 액터에 ASC가 부착되어 있어야 게임 플레이 어빌리티를 활성화 할 수 있으며, ASC가 부착된 액터 사이에서 GAS를 이용한 상호작용이 가능하다.
어빌리티 시스템 컴포넌트(ASC) 사용하기
- ASC가 붙어있으면 GAS의 게임 플레이 어빌리티를 활성화 할 수 있다.
- GAS시스템을 사용하는 액터간의 상호작용은 양쪽 모두에 ASC가 부착되어 있을 때 가능하다.
- 이를 통해 다른 액터로 상호작용을 시도할 수 있고 액션을 받은 다른 GAS액터는 그 영향을 받아 게임 시스템을 변경하는 피드백 작용을 거치게 된다. 반대로도 마찬가지.
어빌리티 시스템 컴포넌트(ASC) 초기화
- AbilityActorInfo의 핵심 요소
- Owner(소유자) : 어빌리티 시스템 컴포넌트를 소유하는 액터
- Avatar(아바타) : 게임 공간 내에서 액션을 실제로 수행하는 물리적 액터. 어빌리티(애니메이션, 이동 등)를 실제로 수행하는 물리적 액터
- 기타 : PlayerController, ASC, SkeletalMesh, AnimInstance, MovementComponent 등
- Owner와 Avatar를 동일한 액터에 설정할 수도 있지만, 이를 따로 분리해서 설정하는 것도 가능하다.!

게임플레이 어빌리티(GA) 개요
- 게임에서 사용하는 다양한 액션 명령을 게임플레이 어빌리티라고 한다.
- GA는 사용자의 입력에 따라 발동하도록 설계되어 있다.
- 주로 플레이어의 직접적인 입력을 통해 발동되도록 설계.
- 또는, 특정 이벤트에 의해 조건이 만족하면 자동으로 발동되도록 설계
- 앞서 말했던, 어빌리티 시스템에 설정된 아바타 액터가 상황에 맞게 애니메이션 및 움직임을 주도록 설계된 액션의 단위가 게임플레이 어빌리티이다.
GAS에서 Ability 부여하기
- ASC를 탑재한 Actor가 게임 플레이 어빌리티(GA)를 발동하는 방법에 대해서 알아보자.
- 어빌리티를 활성화 하려면, 먼저 해당 어빌리티를ASC에 부여(Give)해야 한다.
- 이 과정은 GiveAbility함수를 호출하여 구현.
- 부여된 어빌리티는 SpecHandle을 통해 제어.
- 어빌리티가 활성화되면, ASC의 AbilityActorInfo가 전달되어 다양한 명령을 수행하는데 사용
Gameplay Tag 개요
- 특성을 표현하기 위해 FName으로 관리되는 데이터 구조
- Actor와 Component에서 사용하는 언리얼 엔진의 태그와는 다름.
- 프로젝트 설정에서 게임플레이 태그를 전역으로 관리하며, 프로젝트 전반에 사용함.
- 게임플레이 태그는 DefaultGamePlayTags.ini파일에 저장하되, 다른 파일로도 확장 가능.
- 계층적이고 모듈화된 구조 덕분에 체계적인 관리를 수행할 수 있다.
- Gameplay Tags예:
- Actor.Action.Attack : 액션 애셋을 위한 태그로, 어빌리티를 발동시키는데 사용
- Actor.State.Attacking : 상태를 나타내는 태그로, 어빌리티의 활성화 상태를 감지하는 데 사용
- Event.Character.HitCheck : 캐릭터의 어빌리티가 적중했을 때 발동하는 이벤트 태그
Gameplay Tag Container사용하기
- 여러 개의 게임플레이 태그를 담는 컨테이너
- GAS에서는 하나의 어빌리티에 여러 개의 게임플레이 태그를 할당하는 상황이 잦음.
- 다양한 공격 타입에 따른 태그의 조합 예시.
- 물리 근접 공격
- Character.State.Attacking
- Attack.Basic.Physical.Melee
- 물리 원거리 스킬 공격
- Character.State.Attacking
- Attack.Skill.Physical.Melee
- 마법 스킬 공격
- Chacracter.State.Attacking
- Attack.Skill.Magical.Fire
- 물리 근접 공격
실습 진행 – 1. Jump를 Ability화 시키기.
1. GAS를 사용하기 위해 Edit > Plugins로 가서 Gameplay Abilities 플러그인 활성화 후 재시작.
2. BP_ThirdPerson에서 Ability System Component추가하기(ASC로 네이밍 변경)
- 이제부터 GAS를 기반으로 액터들과 상호 통신할 수 있는 기반이 마련됨.
3. IA_Jump를 할 때, 그대로 Jump를 실행하는 것이 아니라, Jump기능을 Gameplay Ability화 시켜서 Gameplay의 스킬을 구동하는 것처럼 Jump를 구현하고 Stop시킬 것임.
- 점프 기능을 스킬로 만들기.
- BP Class클릭 > GameplayAbility_CharacterJump 선택 > BPGA_Jump로 네이밍
- 에러가 날 것인데, 클릭하고 Details의 Advanced > Instancing Policy를 Instanced Per Actor로 변경 및 저장.
4. 이제 위에서 만들어준 BPGA_Jump를 실제 Ability로서 넣어줘야 캐릭터가 사용이 가능하다.
- BP_ThirdPersonCharacter로 돌아가고, 최초로 Event Possessed를 진행할 때, 기존에 돌아가던 코드는 Sequence노드로 진행되도록 해주고, Then 1번에 새롭게 연결을 시작해준다.
- Get ASC -> Give Ability 노드의 Target으로 ASC연결 -> Ability Class에서 BPGA_Jump를 선택.
- 이제부터 캐릭터는 점프라는 스킬을 소유할 수 있게 된다. (소유만 하는 것일 뿐 아직 점프를 입력 처리는 못하는 상태)
- 점프를 수행할 수 있는 어떤 매개체가 필요한데, 여기서는 Spec Handle이라는 데이터이다(return value로 나옴). 이것을 변수로 보관(이름 : JumpSpecHandle)
5. IA_Jump로 가서 Get Jump Spec Handle > Try Activate Ability로 처리하고 Ability to Activate는 JumpSpecHandle로 연결
5-1) Jump_End에 대해서는 Get Gameplay Ability from Spec Handle로 하고, Ability Spec Handle은 JumpSpecHandle로 연결해준다. Return에 대해서 Cancel Ability로 처리.
–> 이렇게 하면 Jump를 Ability를 기반으로 수행하게 된다.
실습 진행 – 2. 충돌체 박스에 닿은 경우 점프하지 못하게 막는 방법.
1. 캐릭터 점프를 하지 못하게하는 명령어에 대한 태그 생성
- Edit > Project Settings > Gameplay Tags > Gameplay Tag List > Manage Gameplay Tags… 버튼 클릭
+누르고 Name :character.Block.Jump라고 쓰고 Source : 의 우측에 있는 아래 화살표 클릭한 후DefaultGameplayTags.ini파일 클릭- ActorBeginOverlap에서 AddLoose Gameplay Tags노드 연결 및 Gameplay Tags를 변수로 승격후 이름을 BlockTag로 수정.
- AddLoose Gameplay Tags의 Details창에 Block Tag를 위에서 생성한 character.Block.Jump로 체크.
- ActorEndOverlap에서는 Remove Loose Gameplay Tags 노드 연결.
- BlockTag로 Gameplay Tags연결.
-
틸트 를 눌러서
showDebug AbilitySystem명령어를 입력하면 현재 가지고 있는 태그에 대한 정보를 디버깅 할 수 있게 됨. -
BPGA_Jump를 열어서 Activation Blocked Tags항목에 Character.Block.Jump로 설정해주면 이제 이 항목이 뜨고 있는 경우 점프를 하지 못하게 막히게 된다.
- 참고로 위 1번에서 만들었던 Tag이름을 블루프린트 내부에서도 만들 수 있다.
실습 진행 – 3
-
플레이어 태그 블루프린트 내부에서 설정법.
-
Bind Event Wrapper to Gameplay Tag Changed 라는 노드를 통해 시작 시 게임 플레이 태그가 변화되었는지 감지하여 변화되었을 경우 어떤 코드가 실행되도록 하는 방식.

No Comment! Be the first one.