언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

GAS 프레임워크 도입 - 1) ASC와 AttributeSet 추가 및 설정

monstro 2025. 6. 29. 21:10
728x90
반응형

- 개요

본격적으로 GAS 프레임워크를 프로젝트에 도입한다

도입하기 이전에 GAS 프레임워크의 구성을 간단하게 정리해보았다

  • Gameplay Ability : 동작이나 하나의 스킬, ASC를 통해 사용 가능
  • Gameplay Effect : GA를 사용함으로서 적용할 효과
  • Attribute Set : GAS 프레임워크에서 스탯(=능력치), GE에 의해 변경됨
  • Gameplay Tag : 열거형이지만, 하나의 상태를 기록하는 등의 다목적 열거형
  • AbiltiySystemComponent : GAS 프레임워크에서의 실행 주체, GAS 기능을 사용하는 경우 반드시 필요
  • Gameplay Cue : VFX와 같은 시각 효과를 연출하는 용도
  • Ability Task : GA 실행 중비동기 작업을 수행하는 용도

 

1) GAS 프레임워크 관련 플러그인 추가

 

GAS 프레임워크를 사용하기 위해서는 특정한 플러그인을 프로젝트에 추가해야 한다

 

2) ASC 클래스 생성

 

GAS 프레임워크의 흐름을 진행하기 위해 반드시 필요한 Abiltity System Component 클래스를 생성한다

GAS 관련 동작을 수행하는 주체 반드시 해당 컴포넌트를 갖고 있어야 한다

 

3) Attribute Set 클래스 생성

 

다음으로 GAS 프레임워크에서 능력치와 같은 수치 정보를 담당하는 Attribute Set 클래스를 생성한다

 

4) AuraCharacterBase 클래스

 

ASC를 갖고 있는 클래스 AiblitySystemInterface를 상속받아 ASC를 반환할 수 있어야 한다

 

 

생성한 ASC와 AttributeSet을 프로퍼티로 추가한다

 

 

AbilitySystemInterface의 함수 GetAbilitySystemComponent

멤버 함수 GetAttribute를 사용하여 ASCAttributeSet을 반환한다

 

 

GetAbilitySystemComponent 함수에서는 프로퍼티인 ASC를 리턴한다

 

5) AuraEnemy 클래스

 

AuraEnemy 클래스의 생성자에서 상속받은 ASC 프로퍼티AttributeSet 프로퍼티를 생성한다

ASCSubObject로 생성한 후에, 서버에 의한 데이터 동기화 방식인 Replication 옵션을 수행하게끔 설정한다

AttributeSet도 ASC와 동일하게 SubObject로 생성한다

 

6) PlayerState 클래스의 생성과 설정

몬스터의 경우, 캐릭터가 ASC를 직접 들고 있도록 구성한다

하지만 캐릭터의 경우 ASC를 들고 있는 대상을 2가지 경우에서 선택할 수 있다

 

1) 플레이어의 캐릭터가 ASC를 들고 있는 경우

플레이어 캐릭터가 ASC를 들고 있다면 다음의 2가지 조건이 반드시 지켜져야 한다

  • 네트워크가 동작하지 않는 싱글 게임이어야 한다
  • ASC가 달린 캐릭터 변하지 않고 계속 유지되어야 한다

 

2) PlayerState가 ASC를 들고 있는 경우

서버에 존재하는 GameMode에 원본인 PlayerController의 데이터를 넘겨주는 것은 위험하다

따라서 PlayerController를 일부 복사하여 넘겨주는데, 여기서의 복사본이 바로 PlayerState이다

따라서 다음의 조건인 경우 PlayerState가 ASC를 들고 있게 된다

  • 네트워크 요소가 가미된 멀티 플레이어 게임이어야 한다

네트워크를 고려하지 않더라도 PlayerState가 ASC를 들고 있는 경우가 더 안정적이므로

프로젝트에서는 PlayerState를 추가하고 ASC를 들고 있게끔 구성한다

 

 

ASC를 들고 있으므로 PlayerState 역시, AbilitySystemInterface를 상속받아 ASC를 반환한다

 

 

ASC와 AttributeSet을 프로퍼티로 사용한다

 

 

GetAbilitySystemComponent 함수로 ASC를 반환하고,

GetAttributeSet 함수로 AttributeSet을 반환한다

 

 

생성자에서는 ASC를 Subobject로 생성하고 Replicate하도록 설정한다

AttributeSet도 동일하게 Subobject로 생성한다

그리고 PlayerStateReplication 주기를 100으로 설정한다

 

 

GetAbilitySystemComponent 함수에서는 ASC 프로퍼티를 반환한다

728x90
반응형