언리얼/게임 프로젝트

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (4) GAS 프레임워크의 이해와 PlayerState

monstro 2024. 11. 16. 19:10
728x90
반응형

기본적인 게임의 구조를 설정하였으므로 이제 본격적으로 

GameAbilitySystem을 적용해보겠습니다.

그전에 GAS의 구성과 흐름을 한번 짚고 넘어가겠습니다.

 

1) GAS 프레임워크의 구조

GAS 프레임워크는 다음의 구조로 동작합니다.

 

위와 같이 그림으로서 GAS가 동작하는 구조를 정리하였습니다.

이제 세부 사항들에 대해 알아보겠습니다.

 

Ability System Component, 줄여서 ASC라고 불리는 요소입니다.

GAS 프레임워크에서 가장 중요한 역할을 수행, Actor에 부착되며 여러 설정을 가능하게 합니다.

 

Attribute Set은 기존에 클래스에서 변수로 모아놓은 데이터들을 새로운 형태로 빼놓은 형태입니다.

GAS 시스템에서 사용할 수 있는 데이터인 Attribute모아놓은 집합이라고 생각하시면 됩니다,

 

Gameplay Ability는 GAS 시스템에서 Actor가 사용할 수 있는 기능을 모아 클래스로 만든 것입니다.

 

Ability TaskGameplay Ability에 의해 비동기적으로 수행되는 기능들을 의미합니다.

 

Gamepley EffectAttribute를 변화시키기 위해 사용합니다.

 

Gameplay CueGAS 시스템으로 생성하는 시각적, 청각적 효과를 말합니다.

 

Gameplay Tag는 GAS 시스템뿐만 아니라 외부에서도 사용가능합니다

Tag를 통해 Actor들의 상태나 행동을 관리하는데 사용할 수 있습니다.

 

 

2) Player에 ASC를 추가하기

우선 플레이어에게 ASC를 추가하겠습니다.

이 경우에 2가지 시나리오를 떠올릴 수 있습니다.

 

첫번째로, Player 클래스ASC와 Attribute Set을 들고 있게끔 설계할 수 있습니다.

이 경우 Player의 인스턴스가 파괴되면 기존의 ASC와 Attribute Set의 데이터가 전부 날아갑니다.

하지만 Player가 여러 개 존재하는 경우 다양한 설정이 가능합니다.

 

두번째로, PlayerState 클래스가 ASC와 Attribute Set을 들고 있게끔 설계할 수 있습니다.

PlayerState는 Player의 정보를 담고 있는 클래스로서 Player 인스턴스가 파괴되도 존재합니다.

이를 통해 기존의 ASC와 Attribute Set의 데이터를 유지할 수 있습니다.

다만 Player를  다양하게 설정할 수 없다는 단점이 존재합니다.

 

이 프로젝트에서는 플레이어는 한 종류만 존재하고, 몬스터는 여러 종류가 존재합니다.

따라서 플레이어는 PlayerState에서, 몬스터는 몬스터 클래스에서 ASC와 Attribute Set을 관리하겠습니다.

 

2) PlayerState 클래스

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/PlayerState.h"
#include "AuraPlayerState.generated.h"

/**
 * 
 */
UCLASS()
class AURA_API AAuraPlayerState : public APlayerState
{
	GENERATED_BODY()
	
public:
	AAuraPlayerState();
};

 

#include "Player/AuraPlayerState.h"

AAuraPlayerState::AAuraPlayerState()
{
	// 서버가 클라이언트를 업데이트하는 주기
	NetUpdateFrequency = 100.f;
}

 

아직까지는 별다른 설정 없이 NetUpdateFrequency만 100으로 설정하겠습니다.

이후 솔루션 파일을 빌드하여 언리얼 에디터를 실행하여 GameMode에서 설정을 진행하겠습니다.

 

 

게임모드 블루프린트에서 블루 프린트로 만든 PlayerController와 PlayerState를 등록하겠습니다.

게임을 시작해보면

 

 

아웃라이너에서

PlayerState 블루 프린트의 인스턴스와 PlayerController 블루 프린트의 인스턴스를 확인할 수 있습니다.

728x90
반응형