2025. 5. 10. 19:57ㆍ자기계발
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 언리얼 엔진의 Gameplay Ability System (GAS)을 기반으로, UAbilitySystemComponent, IAbilitySystemInterface, 그리고 UAttributeSet을 활용하여 캐릭터의 스탯 시스템을 간단하게 구현해보았다. 단순히 체력, 마나, 공격력 등의 수치를 블루프린트나 변수로 직접 관리하던 기존 방식과 달리, GAS에서는 데이터 기반으로 확장성과 유지보수가 뛰어난 방식으로 스탯을 설계할 수 있다는 점이 인상 깊었다.
가장 먼저 진행한 작업은 스탯 데이터를 정의하는 것이었다. 이를 위해 UAttributeSet을 상속받아 체력(Health), 최대 체력(MaxHealth), 등을 선언했다. 각 스탯은 FGameplayAttributeData로 선언하고, ATTRIBUTE_ACCESSORS 매크로를 통해 간편하게 Getter/Setter를 생성했다. 이 방식은 단순한 변수 선언을 넘어, GAS 내부에서 스탯의 변화 감지, 복제, 효과 적용 등을 모두 자동으로 처리할 수 있도록 구성되어 있어 매우 강력했다.
#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
FGameplayAttributeData _health;
ATTRIBUTE_ACCESSORS(UBaseCharacterStatus, _health)
다음은 캐릭터 클래스에 Ability System Component(ASC)를 붙이는 작업이었다. 이를 위해 캐릭터 클래스가 IAbilitySystemInterface를 구현하고, GetAbilitySystemComponent() 함수를 오버라이드하여 내 ASC를 반환하도록 했다.
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "AbilitySystemInterface.h"
#include "BaseCharacter.generated.h"
UCLASS()
class ARPROJECT_API ABaseCharacter : public ACharacter, public IAbilitySystemInterface
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
ABaseCharacter();
class UBCAbilitySystemComponsnet* GetAbilitySystemComponent() const override { return _abilitySystem; }
class BasecharacterStatus* GetStatus() const { return _status; }
이번 학습을 통해 GAS의 기본 구조인 AbilitySystemComponent, AbilitySystemInterface, AttributeSet의 역할을 정확히 파악할 수 있었고, 복잡할 것 같았던 GAS 기반 스탯 시스템이 의외로 깔끔하게 구현될 수 있다는 점이 놀라웠다.
특히 수많은 능력과 효과를 관리해야 하는 RPG나 액션 게임에서 GAS는 필수 도구라는 확신이 들었다. 이전에는 단순한 float 변수 하나를 여러 곳에서 직접 조작했지만, GAS 구조 안에서는 변화의 원인과 맥락을 추적하고 관리하는 것이 훨씬 명확하고 안정적이다.
Abit.ly 다운받기
abit.ly
'자기계발' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 41일차 : RPG 전투 플레이 프로젝트로 배우는 언리얼 엔진 5 게임 개발 강의 후기 (0) | 2025.05.11 |
---|---|
[클래스101] 구글 애드센스로 평생 월 100만원 만드는 방법 18일차 (0) | 2025.05.10 |
[클래스101] 구글 애드센스로 평생 월 100만원 만드는 방법 17일차 (1) | 2025.05.09 |
패스트캠퍼스 환급챌린지 39일차 : RPG 전투 플레이 프로젝트로 배우는 언리얼 엔진 5 게임 개발 강의 후기 (0) | 2025.05.09 |
[클래스101] 구글 애드센스로 평생 월 100만원 만드는 방법 16일차 (3) | 2025.05.08 |