어빌리티 시스템 컴포넌트(ASC)의 정의
AbilitySystemComponent (ASC)는 GAS의 핵심입니다. 시스템과의 모든 상호 작용을 처리하는 컴포넌트입니다.
GameplayAbility을 사용하거나 Attributes를 가지거나, GameplayEffects를 받으려는 액터에는 반드시 ASC가 하나씩 붙어 있어야 합니다.
ASC는 OwnerActor와 AvatarActor를 가지고 액터와 상호작용합니다.
ASC를 가지고 있는액터를ASC의OwnerActor라고 합니다.ASC의 Avatar가 나타나는액터를AvatarActor라고 합니다.
MOBA 게임에서 단순한 AI 미니언의 경우처럼 OwnerActor와 AvatarActor가 동일한 액터일 수도 있고, 혹은 플레이어가 조종하는 영웅과 같이 OwnerActor가 PlayerState이고 AvatarActor가 영웅의 Character 클래스인 경우도 있을 수도 있습니다. 대부분의 액터는 자체적으로 ASC를 갖습니다. MOBA 게임의 영웅처럼 액터가 리스폰되고 스폰 사이에 Attributes 또는 GameplayEffects의 지속성이 필요한 경우, PlayerState 클래스가 ASC의 이상적인 위치입니다.
어빌리티 시스템 컴포넌트(ASC)의 생성 및 초기화
C++의 경우,
헤더파일(.h)
1. #include "AbilitySystemInterface.h" 추가 2. Class의 Parent Class로 public IAbilitySystemInterface 추가 3. UAbilitySystemComponent* AbilitySystemComponent; 변수 생성 4. virtual class UAbilitySystemComponent* GetAbilitySystemComponent() const override 함수 오버라이드
// YourCharacter.h
#include "AbilitySystemInterface.h"
...
class AGASTemplateCharacter : public ACharacter, public IAbilitySystemInterface
{
GENERATED_BODY()
/** 어빌리티 시스템 컴포넌트입니다. 게임플레이 어트리뷰트 및 게임플레이 어빌리티를 사용하려면 필요합니다. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Abilities", meta = (AllowPrivateAccess = "true"))
UAbilitySystemComponent* AbilitySystemComponent;
/** IAbilitySystemInterface */
virtual class UAbilitySystemComponent* GetAbilitySystemComponent() const override { return AbilitySystemComponent; }소스파일(.cpp)
1. #include "AbilitySystemComponent.h" 2. AbilitySystemComponent 생성 3. AbilitySystemComponent 초기화
// YourCharacter.cpp
#include "AbilitySystemComponent.h"
// 생성자
AGASTemplateCharacter::AGASTemplateCharacter()
{
...
// Ability System Component 생성
AbilitySystemComponent = CreateDefaultSubobject<UAbilitySystemComponent>(TEXT("AbilitySystemComponent"));
AbilitySystemComponent->SetIsReplicated(true); // 모든 클라이언트에 복제되도록 설정
}
void AGASTemplateCharacter::BeginPlay()
{
Super::BeginPlay();
// 캐릭터가 소유한 AbilitySystemComponent를 초기화합니다.
if (AbilitySystemComponent)
{
// OnwerActor : 캐릭터 자신, AvatarActor : 캐릭터 자신
AbilitySystemComponent->InitAbilityActorInfo(this, this);
}
}이러면 이제 기본적으로 액터에서 ASC를 사용할 준비가 되었습니다.
💡 TIP #include AbilitySystemInterface가 실행되지 않아요!
프로젝트의 Visual Studio 파일을 재생성 하신 뒤에 빌드하시면 해결됩니다. How can I fix an error with #include AbilitySystemInterface from GameplayAbilities?
블루프린트의 경우,
액터 - 컴포넌트 - 추가 - Ability System Component를 추가하시면 됩니다.
하지만 이렇게 블루프린트로 ASC를 생성하는 경우, 추후 C++보다 사용하는 데 제한이 있을 수 있습니다.
결과 확인
이렇게 정상적으로 액터에 GAS의 핵심인 Ability System Component를 추가했습니다. 이제 이 ASC를 가지고 능력을 활성화하거나 어트리뷰트 데이터를 변경하는 등의 다양한 작업을 실행할 수 있습니다.