0. 개요
이전에 생성한 Data Asset을 이용하여 게임모드에서 몬스터 유형에 대해 기본 속성 값을 적용한다.
1. 게임플레이 이펙트를 사용하여 기본 속성 값을 적용하기
(1) 게임 모드 수정 - AuraGameModeBase
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "AuraGameModeBase.generated.h"
class UCharacterClassInfo;
/**
*
*/
UCLASS()
class AURA_API AAuraGameModeBase : public AGameModeBase
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, Category="Character Class Default")
TObjectPtr<UCharacterClassInfo> CharacterClassInfo;
};
이전에 생성했던 캐릭터 클래스 정보를 가져와서 적용할 것이다.
(2) Aura 어빌리티 시스템 라이브러리
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "UI/WidgetController/OverlayWidgetController.h"
#include "UI/WidgetController/AttributeMenuWidgetController.h"
#include "Data/CharacterClassInfo.h"
#include "AuraAbilitySystemLibrary.generated.h"
class UAbilitySystemComponent;
/**
*
*/
UCLASS()
class AURA_API UAuraAbilitySystemLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintPure, category="AuraAbilitySystemLibrary|WidgetController")
static UOverlayWidgetController* GetOverlayWidgetController(const UObject* WorldContextObject);
UFUNCTION(BlueprintPure, category = "AuraAbilitySystemLibrary|WidgetController")
static UAttributeMenuWidgetController* GetAttributeMenuWidgetController(const UObject* WorldContextObject);
UFUNCTION(BlueprintCallable, category="AuraAbilitySystemLibrary|CharacterClassDefaults")
static void InitializeDefaultAttributes(const UObject* WorldContextObject, ECharacterClass CharacterClass, float Level, UAbilitySystemComponent* ASC);
};
기본 속성 값을 초기화하는 함수를 선언한다.
void UAuraAbilitySystemLibrary::InitializeDefaultAttributes(const UObject* WorldContextObject, ECharacterClass CharacterClass, float Level, UAbilitySystemComponent* ASC)
{
AAuraGameModeBase* AuraGameMode = Cast<AAuraGameModeBase>(UGameplayStatics::GetGameMode(WorldContextObject));
if (AuraGameMode == nullptr)
return;
// 적용될 아바타 액터
AActor* AvatarActor = ASC->GetAvatarActor();
// 유형에 대한 기본 속성 값
UCharacterClassInfo* CharacterClassInfo = AuraGameMode->CharacterClassInfo;
FCharacterClassDefaultInfo ClassDefaultInfo = CharacterClassInfo->GetClassDefaultInfo(CharacterClass);
// 게임플레이 이펙트 적용을 위한 컨텍스트 핸들 생성 및 소스 오브젝트 추가
FGameplayEffectContextHandle PrimaryAttributesContextHandle = ASC->MakeEffectContext();
PrimaryAttributesContextHandle.AddSourceObject(AvatarActor);
FGameplayEffectContextHandle SecondaryAttributesContextHandle = ASC->MakeEffectContext();
SecondaryAttributesContextHandle.AddSourceObject(AvatarActor);
FGameplayEffectContextHandle VitalAttributesContextHandle = ASC->MakeEffectContext();
VitalAttributesContextHandle.AddSourceObject(AvatarActor);
// 게임플레이 이펙트 스펙 적용
const FGameplayEffectSpecHandle PrimaryAttributesSpecHandle = ASC->MakeOutgoingSpec(ClassDefaultInfo.PrimaryAttributes, Level, PrimaryAttributesContextHandle);
ASC->ApplyGameplayEffectSpecToSelf(*PrimaryAttributesSpecHandle.Data.Get());
const FGameplayEffectSpecHandle SecondaryAttributesSpecHandle = ASC->MakeOutgoingSpec(CharacterClassInfo->SecondaryAttributes, Level, SecondaryAttributesContextHandle);
ASC->ApplyGameplayEffectSpecToSelf(*SecondaryAttributesSpecHandle.Data.Get());
const FGameplayEffectSpecHandle VitalAttributesSpecHandle = ASC->MakeOutgoingSpec(CharacterClassInfo->VitalAttributes, Level, VitalAttributesContextHandle);
ASC->ApplyGameplayEffectSpecToSelf(*VitalAttributesSpecHandle.Data.Get());
}
이전에 게임플레이 이펙트 스펙을 이용하여 이펙트를 적용하는 방법을 이용한다.
게임플레이 이펙트 스펙을 적용할 때 이펙트 컨텍스트 핸들에 어떤 액터가 해당 효과를 받을 것인지에 대한 정보를 넘겨야 한다.
2. 몬스터에 유형 및 속성(Attributes) 부여하기 - AuraEnemy
(1) 몬스터에 유형 부여
UPROPERTY(EditAnywhere, BlueprintReadOnly, category = "Character Class Defaults")
ECharacterClass CharacterClass = ECharacterClass::Warrior;
(2) 오버라이드
void AAuraEnemy::InitAbilityActorInfo()
{
AbilitySystemComponent->InitAbilityActorInfo(this, this);
Cast<UAuraAbilitySystemComponent>(AbilitySystemComponent)->AbilityActorInfoSet();
InitializeDefaultAttributes();
}
어빌리티 액터 정보를 초기화 하는 함수의 InitializeDefaultAttributes 함수는 AuraCharacterBase에 정의되어 있는 함수이다.
void AAuraCharacterBase::InitializeDefaultAttributes() const
{
ApplyEffectToSelf(DefaultPrimaryAttributes, 1.f);
ApplyEffectToSelf(DefaultSecondaryAttributes, 1.f);
ApplyEffectToSelf(InitializeVitalAttributes, 1.f);
}
정의된 기본값을 적용하는 함수이다.
virtual void InitializeDefaultAttributes() const;
몬스터에게는 이 기본값이 아닌 특정 값을 적용시킬 것이므로 이 함수를 오버라이드하여 사용할 것이다.
(부모의 함수를 가상 함수로 만든다)
void AAuraEnemy::InitializeDefaultAttributes() const
{
UAuraAbilitySystemLibrary::InitializeDefaultAttributes(this, CharacterClass, Level, AbilitySystemComponent);
}
3. 게임 모드 블루프린트 수정
4. 몬스터의 레벨과 유형 수정
추가된 객체를 클릭하여 레벨과 캐릭터 유형을 바꿀 수 있다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
11-2. 게임플레이 이펙트 - (7) 호출자에 의한 크기 계산(Set By Caller Magnitude) - 데미지 계산 (1) | 2024.12.18 |
---|---|
11-1. 메타 속성(Meta Attributes) - 데미지 계산 (0) | 2024.12.18 |
10-3. 게임플레이 이펙트 - (6) 커브 테이블(Curve Table)에 따른 수정자 값 적용, CSV 및 JSON 적용 (0) | 2024.12.17 |
10-2. 게임플레이 이펙트 클래스 - (7) 캐릭터 유형(직업)별 속성 기본값 적용 (0) | 2024.12.17 |
10-1. 캐릭터 유형에 따른 속성 값 설정, 클래스 기본 데이터 에셋 (0) | 2024.12.17 |