득이공간
[게임플레이 어빌리티 시스템] 1장. 언리얼 게임플레이 어빌리티 시스템 기초 본문
해당 게시물은 이득우 교수님의 '게임플레이 어빌리티 시스템' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.
📌 목차 - 1장. 언리얼 게임플레이 어빌리티 시스템 기초
1-1. 언리얼 게임플레이 어빌리티 시스템 개요
1-2. 게임플레이 어빌리티 시스템의 시작
📌 1-1. 언리얼 게임플레이 어빌리티 시스템 개요
1. 게임플레이 어빌리티 시스템의 주요 구성 요소 학습
2. 앞으로 실습할 프로젝트 소개
3. 향후 실습 프로젝트의 구현 방향
- 게임플레이 어빌리티 시스템 (GAS) 프레임웍
- 큰 규모의 RPG 및 네트웍 멀티플레이 게임을 효율적으로 만드는데 적합함
- 액터가 소유하고 발동할 수 있는 어빌리티 및 액터 간의 인터랙션 기능을 제공하는 프레임웍
- RPG, 액션 어드벤처, MOBA 장르의 제작을 쉽게하기 위한 도구. 대부분의 게임 제작에 활용 가능
- 장점
- 유연성과 확장성
- 다양하고 복잡한 게임 제작에 대응할 수 있도록 범용적으로 설계
- 모듈러 시스템
- 각 기능에 대한 의존성이 최소화되도록 설계
- 네트워크 지원
- 네트웍 멀티플레이어 게임에서도 활용 가능하도록 설계
- 데이터 기반 설계
- 데이터를 기반으로 동작하도록 설계
- 완성도
- 포트나이트 게임 서비스를 통해 실효성 검증
- 유연성과 확장성
- 단점
- 배우는 학습 비용
- 구성 요소가 많아서 학습하는 비용이 꽤 큼
- 오버헤드
- 작은 규모의 프로젝트에는 복잡한 구조가 오히려 부담될 수 있음
- 배우는 학습 비용
- 게임플레이 어빌리티 시스템의 핵심 구성 요소
- 어빌리티 시스템 컴포넌트(ASC): 어빌리티 시스템 컴포넌트
- 게임플레이 태그(Tag): 게임플레이 태그, 게임플레이 태그 컨테이너
- 게임플레이 어빌리티(GA): 게임 어빌리티, 어빌리티 태스크, 게임플레이 이벤트
- 게임플레이 이펙트(GE): 게임플레이 이펙트, 이펙트 실행 계산, 장식 이펙트 게임플레이 큐
- 어트리뷰트(Attribute): 게임플레이 어트리뷰트 데이터, 어트리뷰트 세트
- 실습 프로젝트 구성의 특징
- 주 게임 모듈이 아닌 보조 게임 모듈을 사용해 GAS에 관련된 모든 기능을 구현
- Part2 및 Part3 프로젝트와 다른 점
- 기본적인 플레이어와 NPC만 구현되어 있음
- 무한 맵 관련 기능 제외함
- 캐릭터 레벨 적용 기능 제외함
- NPC 인공지능 제외함
- 세부 UI 및 게임 마무리 관련 기능 제외함
- 네트웍 멀티플레이 관련 기능 제외함
- 향후 실습 프로젝트에서 구현할 기능
- 게임플레이 어빌리티 시스템의 제작
- 캐릭터의 입력 처리
- 캐릭터의 콤보 공격 구현
- 캐릭터의 공격 판정
- 캐릭터 어트리뷰트 설정
- 게임플레이 이펙트의 활용
- 어트리뷰트와 UI 연동
- 아이템 상자 구현
- 캐릭터의 광역 스킬 구현
📌 1-2. 게임플레이 어빌리티 시스템의 시작
1. 회전하는 분수대 기획을 세 가지 방법으로 구현
1-1. 액터를 확장해 구현: 익숙한 방법으로 빠르게 구현. 새로운 액터 기능이 추가됨
1-2. GAS를 사용해 구현: C++만 사용해 모든 기능 구현 가능. 액터로부터 기능 분리
1-3. 게임플레이 태그를 추가 활용해 구현: 의존성 없는 설계가 가능. 어빌리티 교체 가능
2. 액터의 역할을 최소화시키는데 주력
3. 게임플레이 태그를 활용해 의존성을 분리
4. C++ 프로그래밍 없이도 게임플레이 태그 규약만 잘 지키면 시스템을 유연하게 확장할 수 있음
- 분수대 액터의 기획
- 3초마다 회전과 정지를 무한 반복하면서 동작하는 분수대
- 회전기능은 RotatingMovement 컴포넌트를 사용함
- 이를 어떻게 구현할 것인가?
- 액터에 해당 기능을 구현
- 게임플레이 어빌리티 시스템으로 구현
- 게임플레이 어빌리티 시스템에 게임플레이 태그를 부여해 구현
- 이번 강의에서 다룰 핵심 구성 요소
- 어빌리티 시스템 컴포넌트 (ASC): 어빌리티 시스템 컴포넌트
- 게임플레이 태그 (Tag): 게임플레이 태그, 게임플레이 태그 컨테이너
- 게임플레이 어빌리티 (GA): 게임플레이 어빌리티
- 어빌리티 시스템 컴포넌트
- ASC(Ability System Component)
- 게임플레이 어빌리티 시스템을 관리하는 핵심 컴포넌트
- 게임플레이 어빌리티 및 다양한 작업을 관리하고 처리하는 중앙 처리 장치
- 액터에 단 하나만 부착할 수 있음
- 액터는 부착된 ASC를 통해 게임플레이 어빌리티를 발동시킬 수 있음
- ASC를 부착한 액터 사이에 GAS 시스템의 상호 작용이 가능해짐
- 게임플레이 어빌리티
- GA(Gameplay Ability)
- ASC에 등록되어 발동시킬 수 있는 액션 명령
- 공격, 마법, 특수 공격 등등
- 간단한 액션 뿐만 아니라 상황에 따른 복잡한 액션 수행 가능
- GA의 발동 과정
- ASC에 어빌리티를 등록: ASC의 GiveAbility 함수에 발동할 GA의 타입을 전달
- 발동할 GA 타입 정보를 게임플레이 어빌리티 스펙(GameplayAbilitySpec)이라고 함
- ASC에게 어빌리티를 발동하라고 명령: ASC의 TryActivateAbility 함수에 발동할 GA의 타입을 전달
- ASC에 등록된 타입이면 GA의 인스턴스가 생성됨
- 발동된 GA에는 발동한 액터와 실행 정보가 기록됨
- SpecHandle: 발동된 어빌리티에 대한 핸들
- ActorInfo: 어빌리티의 소유자와 아바타 정보
- ActivationInfo: 발동 방식에 대한 정보
- GA의 주요 함수
- CanActivateAbility: 어빌리티가 발동될 수 있는지 파악
- ActivateAbility: 어빌리티가 발동될 때 호출
- CancelAbility: 어빌리티가 취소될 때 호출
- EndAbility: 스스로 어빌리티를 마무리할 때 호출
- ASC에 어빌리티를 등록: ASC의 GiveAbility 함수에 발동할 GA의 타입을 전달
- 게임플레이 태그
- FName으로 관리되는 경량의 표식 데이터
- 액터나 컴포넌트에 지정했던 태그와 다른 데이터
- 프로젝트 설정에서 별도로 게임플레이 태그를 생성하고 관리할 수 있음
- 결과는 DefaultGameplayTags.ini 파일에 저장됨
- 계층 구조로 구성되어 있어 체계적인 관리 가능
- Actor.Action.Rotate: 행동에 대한 태그
- Actor.State.IsRotating: 상태에 대한 태그
- 게임플레이 태그들의 저장소: GameplayTagContainer
- 계층 구조를 지원하는 검색 기능 제공
- HasTagExact: 컨테이너에 A.1 태그가 있는 상황에서 A로 찾으면 false
- HasAny: 컨테이너에 A.1 태그가 있는 상황에서 A와 B로 찾으면 true
- HasAnyExact: 컨테이너에 A.1 태그가 있는 상황에서 A와 B로 찾으면 false
- HasAll: 컨테이너에 A.1 태그와 B.1 태그가 있는 상황에서 A와 B로 찾으면 true
- HasAllExact: 컨테이너에 A.1 태그와 B.1 태그가 있는 상황에서 A와 B로 찾으면 false
- 게임플레이 어빌리티 시스템과 독립적으로 사용 가능
- FName으로 관리되는 경량의 표식 데이터
- 게임플레이 어빌리티와 게임플레이 태그
- 블루프린트와 조합하여 특정 게임플레이 어빌리티에 대한 의존성을 없애고 게임플레이 태그를 중심으로 게임 로직을 전개 가능
- 게임플레이 어빌리티에 부착한 태그
- 어빌리티에 지정한 태그 (AbilityTags 태그 컨테이너)
- 게임플레이 어빌리티에 대해 다양한 실행 조건의 설정
- 태그로 어빌리티 취소 (CancelAbiliesWithTag 태그 컨테이너)
- 태그로 어빌리티 차단 (BlockAbilityWithTag 태그 컨테이너)
- 어빌리티 실행시 태그 설정 (ActivationOwnedTags 태그 컨테이너)
- 태그가 있어야만 어빌리티 실행 (ActivationRequiredTags 태그 컨테이너)
- 태그가 있으면 어빌리티 실행 차단 (ActivationBlockedTags 태그 컨테이너)
- 시전자가 태그가 있어야 어빌리티 실행 (SourceRequiredTags 태그 컨테이너)
- 시전자에 태그가 있으면 어빌리티 차단 (SourceBlockedTags 태그 컨테이너)
- 시전 대상에 태그가 있어야 어빌리티 실행 (TargetRequiredTags 태그 컨테이너)
- 시전 대상에 태그가 있으면 어빌리티 차단 (TargetBlockedTags 태그 컨테이너)
'GP > UE5' 카테고리의 다른 글
[게임플레이 어빌리티 시스템] 3장. 어트리뷰트와 게임플레이 이펙트의 이해 (0) | 2024.07.19 |
---|---|
[게임플레이 어빌리티 시스템] 2장. 게임플레이 어빌리티 시스템 캐릭터 제작 기초 (0) | 2024.07.19 |
[네트웍 멀티플레이 프레임웍의 이해] 5장. PvP 게임 제작 (0) | 2024.07.19 |
[네트웍 멀티플레이 프레임웍의 이해] 4장. 움직임 리플리케이션 (1) | 2024.07.12 |
[네트웍 멀티플레이 프레임웍의 이해] 3장. RPC의 이해와 활용 (0) | 2024.07.12 |