득이공간

[게임플레이 어빌리티 시스템] 1장. 언리얼 게임플레이 어빌리티 시스템 기초 본문

GP/UE5

[게임플레이 어빌리티 시스템] 1장. 언리얼 게임플레이 어빌리티 시스템 기초

쟁득 2024. 7. 19. 10:17
해당 게시물은 이득우 교수님의 '게임플레이 어빌리티 시스템' 강의를 수강하며
학습한 내용을 개인적으로 정리한 글입니다.

📌 목차 - 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 및 게임 마무리 관련 기능 제외함
    • 네트웍 멀티플레이 관련 기능 제외함
  • 향후 실습 프로젝트에서 구현할 기능
    1. 게임플레이 어빌리티 시스템의 제작
    2. 캐릭터의 입력 처리
    3. 캐릭터의 콤보 공격 구현
    4. 캐릭터의 공격 판정
    5. 캐릭터 어트리뷰트 설정
    6. 게임플레이 이펙트의 활용
    7. 어트리뷰트와 UI 연동
    8. 아이템 상자 구현
    9. 캐릭터의 광역 스킬 구현

📌 1-2. 게임플레이 어빌리티 시스템의 시작

1. 회전하는 분수대 기획을 세 가지 방법으로 구현
1-1. 액터를 확장해 구현: 익숙한 방법으로 빠르게 구현. 새로운 액터 기능이 추가됨
1-2. GAS를 사용해 구현: C++만 사용해 모든 기능 구현 가능. 액터로부터 기능 분리
1-3. 게임플레이 태그를 추가 활용해 구현: 의존성 없는 설계가 가능. 어빌리티 교체 가능
2. 액터의 역할을 최소화시키는데 주력
3. 게임플레이 태그를 활용해 의존성을 분리
4. C++ 프로그래밍 없이도 게임플레이 태그 규약만 잘 지키면 시스템을 유연하게 확장할 수 있음

 

  • 분수대 액터의 기획
    • 3초마다 회전과 정지를 무한 반복하면서 동작하는 분수대
    • 회전기능은 RotatingMovement 컴포넌트를 사용함
    • 이를 어떻게 구현할 것인가?
      1. 액터에 해당 기능을 구현
      2. 게임플레이 어빌리티 시스템으로 구현
      3. 게임플레이 어빌리티 시스템에 게임플레이 태그를 부여해 구현
  • 이번 강의에서 다룰 핵심 구성 요소
    • 어빌리티 시스템 컴포넌트 (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: 스스로 어빌리티를 마무리할 때 호출
  • 게임플레이 태그
    • 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
    • 게임플레이 어빌리티 시스템과 독립적으로 사용 가능
  • 게임플레이 어빌리티와 게임플레이 태그
    • 블루프린트와 조합하여 특정 게임플레이 어빌리티에 대한 의존성을 없애고 게임플레이 태그를 중심으로 게임 로직을 전개 가능
    • 게임플레이 어빌리티에 부착한 태그
      • 어빌리티에 지정한 태그 (AbilityTags 태그 컨테이너)
    • 게임플레이 어빌리티에 대해 다양한 실행 조건의 설정
      • 태그로 어빌리티 취소 (CancelAbiliesWithTag 태그 컨테이너)
      • 태그로 어빌리티 차단 (BlockAbilityWithTag 태그 컨테이너)
      • 어빌리티 실행시 태그 설정 (ActivationOwnedTags 태그 컨테이너)
      • 태그가 있어야만 어빌리티 실행 (ActivationRequiredTags 태그 컨테이너)
      • 태그가 있으면 어빌리티 실행 차단 (ActivationBlockedTags 태그 컨테이너)
      • 시전자가 태그가 있어야 어빌리티 실행 (SourceRequiredTags 태그 컨테이너)
      • 시전자에 태그가 있으면 어빌리티 차단 (SourceBlockedTags 태그 컨테이너)
      • 시전 대상에 태그가 있어야 어빌리티 실행 (TargetRequiredTags 태그 컨테이너)
      • 시전 대상에 태그가 있으면 어빌리티 차단 (TargetBlockedTags 태그 컨테이너)