언리얼 엔진/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 에서 사용할 수 있는 SetHealthAttributeSetGetHealth는 이전 포스트에서 작성한 ATTRIBUTE_ACCESSOR 때문에 사용 가능합니다.
Gameplay Ability System(GAS) - GAMEPLAYATTRIBUTE_REPNOTIFY

 

Gameplay Ability System(GAS) - GAMEPLAYATTRIBUTE_REPNOTIFY

인사말 안녕하세요, 이번 포스트에서는 Gameplay Ability System 을 통해서 캐릭터의 체력 및 마나를 관리하는 속성를 만들어보도록 하겠습니다. GAMEPLAYATTRIBUTE_REPNOTIFY GAMEPLAYATTRIBUTE_REPNOTIFY는 Unreal Engine

online-unreal.tistory.com


결과물

포션에 오버랩이 되면 체력 25가 증가한다.

728x90
반응형