Unreal GAS (3) - Gameplay Ability System 개요

wnsduf0000·2025년 12월 1일

Unreal_GAS

목록 보기
3/34
  • Gameplay Ability System (GAS)의 구성

    1. AbilitySystemComponent

      • GAS의 영향을 받는 캐릭터들이 반드시 지녀야 하는 컴포넌트.
    2. AttributeSet

      • 생명력, 마나 등 속성 등을 정의하는 곳.
    3. GameplayAbility

      • 캐릭터가 할 수 있는 동작을 캡슐화하여 정의하는 클래스.
        공격, 주문 시전 등이 일반적인 GameplayAbility에 해당함.
    4. AbilityTask

      • GameplayAbility에 의해 비동기로 실행되며, GameplayAbility의 실질적인 동작을 담당한다고 볼 수 있음.
      • 비동기로 실행되기 때문에 즉시 작업을 수행해서 완료하거나, 일정 시간 동안에 걸쳐 작업을 수행할 수도 있음.
    5. GameplayAffect

      • Ability의 실질적인 영향을 나타낸다고 볼 수 있음. 속성 값을 변경하는 데 사용됨.
    6. GameplayCue

      • Ability의 외형적인 측면을 정의할 수 있음. 예를 들어 효과음이나 VFX 등.
    7. GameplayTag
      - GAS에서 제공하는 기능은 아니지만, GAS 전반에 걸쳐서 사용됨.

      ※ build.cs -> PrivateDependencyModules "GameplayAbilities""GameplayTags""GameplayTasks" 추가해야 정상적인 빌드 가능.

  • AbilitySystemComponent 및 AttributeSet의 주체

    • 컴포넌트를 보유할 주체를 어떻게 설정하느냐에 따라 장/단점이 존재함.
      • Pawn
        • 해당 Pawn이 사망하여 액터를 파괴하고 재생성해야 한다 가정할 경우,
          액터가 보유한 컴포넌트도 사라지므로, 별도의 세이브 기능을 구현/사용하지 않는 한, AbilitySystemComponent 및 AttributeSet도 초기화 됨.
        • Pawn이 직접 보유하기 때문에 구조는 더 단순함.
      • PlayerState
        • 플레이어 캐릭터가 사망했다가 리스폰되어도, 별도의 클래스에 AbilitySystemComponent 및 AttributeSet이 존재하는 것이므로, 세이브/로드 같은 동작이 필요 없이 계속해서 컴포넌트에 접근할 수 있음.
      • 플레이어의 경우 리스폰이 필요할 수 있으나, 몬스터들의 경우는 그럴 필요가 없음.
      • 따라서, 플레이어는 PlayerState가, 몬스터는 폰 자체가 AbilitySystemComponent 및 AttributeSet을 보유하도록 함.
  • 멀티플레이 환경에서의 GAS

    • 서버의 형태
      • Dedicated Server
        • 실제 플레이어가 존재하지 않으며 렌더링하지 않음.
        • 실제 플레이 하는 것과 동일한 형태의 게임을 실행하지만 단지 렌더링이 없을 뿐임.
      • Listen Server
        • 실제 플레이어의 기기가 호스트로서 작동하는 방식
        • 호스트의 경우 자기 자신의 기기이므로 통신 렉이 발생하지 않는다는 이점 존재
        • 하지만 클라이언트의 경우 호스트의 기기 스펙에 따른 렉이 발생할 수 있음.
    • 서버는 게임의 주요 작업을 판단하는 기준으로서도 작동함 (Authority).
      • GameMode는 오직 서버 측에만 존재함. (클라이언트는 Nullptr에 접근하게 됨.)
      • PlayerController의 경우 서버에는 모든 플레이어의 컨트롤러가 존재하지만,
        클라이언트는 자신의 컨트롤러만 존재함.
      • PlayerState는 서버와 클라이언트 양측에 모든 플레이어의 정보가 존재함.
        Pawn 또한 서버와 클라이언트 양측에 모두 존재함.
      • HUD, Widget들은 각 클라이언트에만 존재하며, Dedicated Server 측에는 존재하지 않음.
        (Listen Server의 경우는 호스트 자신의 것만 존재함)
      • 서버가 클라이언트들에게 정보를 보내주는 방식으로 클라이언트가 지닌 정보를 업데이트하는데, 이를 Replication이라고 부름.
        • Replication은 서버→클라이언트의 단일 방향으로만 발생함.
          클라이언트→서버 방향으로 작동하지 않음.
        • 클라이언트가 서버에 정보를 보내야 하는 경우, RPC(원격 실행 함수)라는 것을 이용함.
profile
저는 게임 개발자로 일하고 싶어요

0개의 댓글