GameAbilitySystem 이란?
에픽 게임즈에서 사용하는 게임 개발 프레임워크
- Ability(능력)와 Attribute(속성)를 통해 구축할 수 있는 높은 유연성을 가진 프레임워크
- 게임 내에서 액션과 패시브 능력을 캐릭터를 통해 사용할 수 있습니다.
- 이러한 능력들을 사용할 때 cooldown이라는 타이머 또는 재료 소모를 구현할 수 있습니다.
- 여기서 재료란 대체로 Mana, Stamina와 같은 것들을 의미합니다.
- Ability는 Level의 개념이 존재하여 각 레벨 별로 효과를 달리할 수도 있습니다.
왜 GAS를 사용해야 하는가?
- 쉽게 확장할 수 있으며, 리플리케이션이 지원 됩니다.
- 다양한 스킬과 클래스를 가지는 멀티 플레이 RPG에서 유요합니다.
- 많은 것들이 이미 구현되어 있기 때문에 게임 개발 시간 단축에 용이합니다.
- 캐릭터의 StateMachine에서 액션이 자유로워 질 수 있습니다.
- 캐릭터가 액션을 실제로 실행할 수 있는 규칙과 조건을 GameplayTag를 통해 설정할 수 있습니다.
- AI 개발 시, 각 행동에 대한 조건을 어빌리티 내부에 정의할 수 있기에, BehaviorTree 노드가 간결해 질 수 있습니다.
주의할 점
- 생각보다 큰 시스템이기에 이해하는게 쉽진 않습니다.
- 기본 구현을 C++로 해야합니다. (BP만을 통해 구현하기엔 무리가 있음)
- 시스템의 모든 기능이 Blueprint로 노출되어 있진 않습니다.
- 그러므로 어느정도 C++을 이해할 수 있어야 합니다.
- 구현은 개발하는 게임에 따라 달라질 수 있습니다.
- 사용할 캐릭터에 필요한 클래스를 포함시켜 줍니다.
- #include "AbilitySystemComponent.h"
- #include "AbilitySystemInterface.h"
- #include "Abilities/GameplayAbility.h"
- IAbilitySystemInterface 상속
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h" #include
"GameFramework/Character.h"
#include "AbilitySystemComponent.h"
#include "AbilitySystemInterface.h"
#include "Abilities/GameplayAbility.h"
#include "BaseCharacter.generated.h"
UCLASS()
class TONYRPG_API ABaseCharacter : public ACharacter : IAbilitySystemInterface
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
ABaseCharacter();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
- 빌드 성공 후 기존에 사용하던 BP Character의 부모클래스를 새롭게 만든 클래스로 변경해줍니다.
- AbilitySystemComponent가 새롭게 추가된 것을 확인할 수 있습니다.
- 이번엔 AttributeSet을 만들어봅니다.
- AttributeSet 클래스를 상속받은 C++ 클래스를 새로 만들었습니다.
- 헤더에 AttributeSet.h 를 포함시켜줍니다.
- AttributeSet 클래스로 가보면, 프로퍼티를 바꿀 수 있는 유용한 매크로들을 미리 만들어놨는데, 이를 이용하면 좋습니다.
- 예시로 AttributeSet Header에 작성되있는 매크로를 보여드리면, Attribute의 프로퍼티 접근에 대한 매크로들이 정의 되어 있는 것을 확인할 수 있습니다.
- 정의 되어 있는 매크로를 실제 사용할 클래스의 헤더로 가져왔습니다.
- 이렇게 진행하면 기본적인 Game Ability System을 사용할 준비가 완료되었습니다.
'UnrealEngine' 카테고리의 다른 글
UnrealEngine 5 Subsystem (0) | 2023.08.12 |
---|---|
GameplayTag (0) | 2023.02.06 |
Actor 개념 정리 (0) | 2022.12.18 |