1. 테스트를 위한 준비

(1) 시작 입력 태그 지정

이 태그가 시작 시 부여되면 어떤 입력 버튼으로 추가되는지 설정한다.

 

 

(2) BP_AuraCharacter에 시작 시 부여하는 어빌리티 추가

레벨업 후 스펠을 찍고 장착하는 과정을 생략할 수 있도록 플레이어 캐릭터에게 처음부터 이 어빌리티를 부여하도록 설정한다.

 

 

2. AuraFireBall 클래스

이 어빌리티는 마우스 아래 지점에 소환하여 여러 갯수의 관통하는 파이어볼을 생성하여 퍼트리고, 다시 모이도록 작동한다.

일반적인 투사체인 파이어볼트와는 다르게 작동할 것이므로, 새로운 C++ 클래스를 생성한다.

 

(1) AuraFireBall 클래스 생성

AuraProjectile을 상속받는 AuraFireBall 클래스를 생성한다.

 

(1-1) AuraProjectile의 OnSphereOverlap 함수를 가상 함수로 재정의

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

AuraFireBall은 적에게 부딫히면 관통했다가 원래의 자리로 돌아올 것이기 때문에, 기존에 구체가 닿으면 폭발하던 메커니즘이 아닌 다른 메커니즘을 사용해야 한다.

따라서, 이 함수를 오버라이드하여 사용하게 될 것이다.

 

(1-2) 클래스 구성

#pragma once

#include "CoreMinimal.h"
#include "Actor/AuraProjectile.h"
#include "AuraFireBall.generated.h"

UCLASS()
class AURA_API AAuraFireBall : public AAuraProjectile
{
	GENERATED_BODY()
	
public:


protected:
	virtual void BeginPlay() override;
	virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;

};
#include "Actor/AuraFireBall.h"

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

}

void AAuraFireBall::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{

}

AuraProjectile의 BeginPlay에서는 투사체의 수명 지정, 움직임 복제, 구체 컴포넌트에 OnSphereOverlap 바인딩, LoopingSoundComponent에 클래스 디폴트에서 지정한 LoopingSound를 지정하고 있다.

이러한 작업이 AuraFireBall에서도 작동하도록 Super의 BeginPlay를 호출한다.

 

 

(2) AuraFireBlast 클래스에 AuraFireBall을 멤버 변수로 추가

private:
	UPROPERTY(EditDefaultsOnly)
	TSubclassOf<AAuraFireBall> FireBallClass;
public:
	UFUNCTION(BlueprintCallable)
	TArray<AAuraFireBall*> SpawnFireBalls();

AureFireBlast 어빌리티는 파이어볼을 이용하여 적을 공격하게 될 것이다.

 

 

3. BP_FireBall 블루프린트 클래스

AuraFireBall을 상속받는 BP_FireBall을 생성한다.

 

(1) 구체(Sphere) 컴포넌트에 나이아가라 파티클 시스템 추가

 

 

(2) 이펙트와 사운드 지정

 

 

(3) 투사체 움직임 컴포넌트(Projectile Movement) 비활성화

투사체 움직임 컴포넌트가 아니라 직접 움직이게 할 것이므로, 초기 속도와 최대 속도를 0으로 지정한다.

 

 

(4) GA_FireBlast에서 FireBall 클래스 지정