언리얼/게임 프로젝트

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (15) 일시적인 GameplayEffect 만들고 적용하기

monstro 2024. 12. 2. 01:15
728x90
반응형

본격적으로 GameplayEffect를 만들기 전에 기존의 EffectActor에서 코드를 일부 수정하겠습니다.

수정사항은 다음과 같습니다.

 

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "AuraEffectActor.generated.h"

class UGameplayEffect;

UCLASS()
class AURA_API AAuraEffectActor : public AActor
{
	.
	.
	.
	// Target 인자의 이름을 TargetActor로 변경
	UFUNCTION(BlueprintCallable)
	void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass);
	
 	// UPROPERTY 지시자에 BlueprintReadOnly를 추가하여 블루 프린트에서 변수로 사용
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Applied Effects")
	TSubclassOf<UGameplayEffect> InstantGameplayEffectClass;
};

 

이제 언리얼 에디터에서 작업을 수행하겠습니다.

 

1) 언리얼 에디터

GameplayEffect 즉, GE의 경우 C++ 보다는 블루 프린트로 작업을 하는 것이 훨씬 유리합니다.

따라서 이를 위해 2개의 GE를 만들겠습니다. 

각각 Health와 Mana를 수행하는 GE입니다.

 

1 - 1) GE_PotionHeal

 

GE_PotionHeal은 위와 같습니다.

Duration은 Instant로 하여 한 프레임에서만 Attribute에 영향을 주게끔 설정하였습니다.

Attribute는 AuraAttributeSet의 Health를 대상으로 수행하며

적용하는 방법Add로 하였고, 연산 방식Scalable Float으로 25.0 의 값을 더하게 됩니다.

 

1 - 2) GE_PotionManaHeal

 

GE_PotionManaHeal의 기본적인 구성은 GE_PotionHeal과 동일합니다.

하지만 대상 Attribute가 AuraAttibuteSet의 Mana를 대상으로 한다는 차이점이 존재합니다.

 

이제 각각의 GE를 적용할 EffectActor의 블루 프린트로 가보겠습니다.

 

1 - 3) BP_HealthPotion

 

BP_HealthPotion의 경우 연결된 Effect는 GE_PotionHeal입니다.

SphereCollider에 Overlap 이벤트가 발생하면 해당 GE를 Overlap된 Actor에게 적용하고

스스로 파괴됩니다.

 

1 - 4) BP_ManaPotion

 

BP_ManaPotion도 마찬가지로 Overlap 이벤트가 발생하면 GE를 Overlap된 Actor에게 적용합니다.

이때 적용하는 GE는 GE_PotionManaHeal입니다.

이제 실제 결과를 확인해보겠습니다.

 

 

 

GE가 잘 적용되어 Attribute를 변경하였고, 변경된 Attribute에 맞춰 UI도 잘 변하는 것을 확인할 수 있습니다.

728x90
반응형