UnrealEngine

GameAbilitySystem 기본

Ms_Tony 2023. 1. 1. 18:10

GameAbilitySystem 이란?

에픽 게임즈에서 사용하는 게임 개발 프레임워크

  • Ability(능력)와 Attribute(속성)를 통해 구축할 수 있는 높은 유연성을 가진 프레임워크
  • 게임 내에서 액션과 패시브 능력을 캐릭터를 통해 사용할 수 있습니다.
  • 이러한 능력들을 사용할 때 cooldown이라는 타이머 또는 재료 소모를 구현할 수 있습니다.
    • 여기서 재료란 대체로 Mana, Stamina와 같은 것들을 의미합니다.
  • Ability는 Level의 개념이 존재하여 각 레벨 별로 효과를 달리할 수도 있습니다.

왜 GAS를 사용해야 하는가?

  • 쉽게 확장할 수 있으며, 리플리케이션이 지원 됩니다.
  • 다양한 스킬과 클래스를 가지는 멀티 플레이 RPG에서 유요합니다.
  • 많은 것들이 이미 구현되어 있기 때문에 게임 개발 시간 단축에 용이합니다.
  • 캐릭터의 StateMachine에서 액션이 자유로워 질 수 있습니다.
    • 캐릭터가 액션을 실제로 실행할 수 있는 규칙과 조건을 GameplayTag를 통해 설정할 수 있습니다.
  • AI 개발 시, 각 행동에 대한 조건을 어빌리티 내부에 정의할 수 있기에, BehaviorTree 노드가 간결해 질 수 있습니다.

주의할 점

  • 생각보다 큰 시스템이기에 이해하는게 쉽진 않습니다.
  • 기본 구현을 C++로 해야합니다. (BP만을 통해 구현하기엔 무리가 있음)
    • 시스템의 모든 기능이 Blueprint로 노출되어 있진 않습니다.
    • 그러므로 어느정도 C++을 이해할 수 있어야 합니다.
  • 구현은 개발하는 게임에 따라 달라질 수 있습니다.
  1. 사용할 캐릭터에 필요한 클래스를 포함시켜 줍니다.
    1. #include "AbilitySystemComponent.h"
    2. #include "AbilitySystemInterface.h"
    3. #include "Abilities/GameplayAbility.h"
    4. 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