언리얼 엔진/Gameplay Ability System - Udemy
[UE5/Gameplay Ability System(GAS)] - Effect Actor
mane
2024. 2. 10. 15:20
728x90
반응형
인사말
안녕하세요. 이번 포스트에서는 GAS 에서 사용될 Effect Actor 클래스를 생성하고 사용해보도록 하겠습니다.
Effect Actor(AActor)
우선 AActor
클래스를 상속받는 Effect Actor
클래스를 생성합니다.
Effect Actor 는 오버랩 이벤트를 발생시키기 위한 SphereComponent
와 보여질 StaticMeshComponent
를 만들어 줍니다.
// Copyright mane
#pragma once
#include "GameFramework/Actor.h"
#include "AuraEffectActor.generated.h"
class USphereComponent;
UCLASS()
class AURA_API AAuraEffectActor : public AActor
{
GENERATED_BODY()
public:
AAuraEffectActor();
UFUNCTION()
virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult );
UFUNCTION()
virtual void EndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex );
protected:
virtual void BeginPlay() override;
private:
UPROPERTY(VisibleAnywhere, Category = "Collision")
TObjectPtr<USphereComponent> Sphere;
UPROPERTY(VisibleAnywhere, Category = "Mesh")
TObjectPtr<UStaticMeshComponent> Mesh;
};
Begin Overlap
오버랩이 될 때 발생하는 코드를 작성해 줍니다.
앞서 Aura Character Base
클래스에서 IAbilitySystemInterface
라는 인터페이스를 달아줬기 때문에 이것을 이용하도록 합니다.
밑에 나와있는 코드는 체력을 25 채워주는 기능을 하는 Effect Actor이다.
void AAuraEffectActor::OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
// TODO: Change this to apply a Gameplay Effect. For now, using const_cast as hack!
if(const IAbilitySystemInterface* AbilitySystemInterface = Cast<IAbilitySystemInterface>(OtherActor))
{
const UAuraAttributeSet* AuraAttributeSet = Cast<UAuraAttributeSet>(AbilitySystemInterface->GetAbilitySystemComponent()->GetAttributeSet(UAuraAttributeSet::StaticClass()));
UAuraAttributeSet* MutableAuraAttributeSet = const_cast<UAuraAttributeSet*>(AuraAttributeSet);
MutableAuraAttributeSet->SetHealth(AuraAttributeSet->GetHealth() + 25.f);
Destroy();
}
}
MutableAuraAttributeSet
에서 사용할 수 있는 SetHealth
와 AttributeSet
의 GetHealth
는 이전 포스트에서 작성한 ATTRIBUTE_ACCESSOR
때문에 사용 가능합니다.
Gameplay Ability System(GAS) - GAMEPLAYATTRIBUTE_REPNOTIFY
결과물
포션에 오버랩이 되면 체력 25가 증가한다.
728x90
반응형