본문 바로가기

게임프로그래밍/실습2

[실습2] 15. 이펙트 액터 만들기

1. 이펙트 액터 생성

 

어트리뷰트 데이터를 만들었으니 연습을 위해 이 데이터에 값을 바꿀 수 있는 액터를 만들어주려고 한다. 어트리뷰트 데이터의 값을 바꾸려면 세터를 이용해서 바꾸는게 아니라 게임플레이 이펙트를 통해 바꿔주어야 한다.

 

 

 

기본 액터 클래스로 만들 것이다.

 

해당 액터에서는 스피어 컴포넌트를 만들고 이에 접근하면 어트리뷰트 데이터를 바꾸는 작업을 할 것이다.

 

class PRACTICE2_API AAuraEffectActor : public AActor
{
    GENERATED_BODY()
    
public: 
    AAuraEffectActor();

protected:
    virtual void BeginPlay() override;

private:
    UPROPERTY(VisibleAnywhere)
    TObjectPtr<USphereComponent> Sphere;

    UPROPERTY(VisibleAnywhere)
    TObjectPtr<UStaticMeshComponent> Mesh;

};

 

AAuraEffectActor::AAuraEffectActor()
{
    PrimaryActorTick.bCanEverTick = false;

    Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");
    SetRootComponent(Mesh);
    
    Sphere = CreateDefaultSubobject<USphereComponent>("Sphere");
    Sphere->SetupAttachment(GetRootComponent());
    
}

 

매시랑 스피어 컴포넌트를 추가해주자.

 

UFUNCTION()
virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& HitResult);

 

이제 오버랩 함수를 선언해준다. 

 

void AAuraEffectActor::BeginPlay()
{
    Super::BeginPlay();

    Sphere->OnComponentBeginOverlap.AddDynamic(this, AAuraEffectActor::OnOverlap);
    
}

 

비긴플레이에서 바인딩을 해주자.

 

함수 시그네쳐를 아는 방법은 사실 콜백함수를 먼저 선언하는 게 아니라 바인딩을 해주고 상위 클래스로 타고 올라가 보는 것이 간단하다. (아니면 그냥 챗GPT에 물어보자)

 

 

UFUNCTION()
virtual void EndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

 

void AAuraEffectActor::BeginPlay()
{
    Super::BeginPlay();

    Sphere->OnComponentBeginOverlap.AddDynamic(this, &AAuraEffectActor::OnOverlap);
    Sphere->OnComponentEndOverlap.AddDynamic(this, &AAuraEffectActor::EndOverlap);
    
}

 

엔드오버랩 함수도 만들고 바인딩 해주자. 오버랩하고 일어날 일은 나중에 만들 것이다. 아직 게임플레이 이펙트에 대해 배우지 않은 단계기 때문에 그 이후에 실제로 구현할 것이다.