0. 개요

레벨업하면 나이아가라 시스템을 사용하여 파티클을 출력한다.

 

 

1. 나이아가라 컴포넌트

(1) 캐릭터에 나이아가라 컴포넌트 생성, 부착

AuraCharacter 클래스의 퍼블릭 섹션에 작성한다.

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
	TObjectPtr<UNiagaraComponent> LevelUpNiagaraComponent;
AAuraCharacter::AAuraCharacter()
{
    LevelUpNiagaraComponent = CreateDefaultSubobject<UNiagaraComponent>("LevelUpNiagaraComponent");
    LevelUpNiagaraComponent->SetupAttachment(GetRootComponent());
    LevelUpNiagaraComponent->bAutoActivate = false;

캐릭터가 레벨업 할 때 나이아가라 효과가 작동할 것이므로, bAutoActivate를 false로 설정한다.

 

 

(2) 클라이언트 RPC

캐릭터의 레벨업 효과가 서버 내의 다른 플레이어에게 노출되게 하기 위하여 RPC를 사용한다.

private:
	UFUNCTION(NetMulticast, Reliable)
	void MulticastLevelUpParticles() const;
void AAuraCharacter::LevelUp_Implementation()
{
    if (IsValid(LevelUpNiagaraComponent))
    {
        LevelUpNiagaraComponent->Activate(true);
    }
}

void AAuraCharacter::MulticastLevelUpParticles_Implementation() const
{

}

 

 

(3) Aura 캐릭터에 나이아가라 시스템 추가

 

 

(4) 파티클 방향이 항상 카메라를 향해 보이게 하기

파티클이 캐릭터의 트랜스폼을 따라가지 않고 항상 카메라에 정렬되어 보이게 하려고 한다.

 

(4-1) 카메라 설정 수정

먼저 카메라의 설정을 변경하여 절대 좌표를 사용하게 한다.

    SpringArm = CreateDefaultSubobject<USpringArmComponent>("SpringArm");
    SpringArm->SetUsingAbsoluteRotation(true);
    SpringArm->bDoCollisionTest = false;
    SpringArm->SetupAttachment(RootComponent);

    Camera = CreateDefaultSubobject<UCameraComponent>("Camera");
    Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);
    Camera->bUsePawnControlRotation = false;

 

 

(4-2) 카메라 좌표를 가져와 파티클 정렬

void AAuraCharacter::LevelUp_Implementation()
{
    MulticastLevelUpParticles();
}

void AAuraCharacter::MulticastLevelUpParticles_Implementation() const
{
    if (IsValid(LevelUpNiagaraComponent))
    {
        // 나이아가라 시스템을 카메라 방향으로 정렬
        const FVector CameraLocation = Camera->GetComponentLocation();
        const FVector NiagaraSystemLocation = LevelUpNiagaraComponent->GetComponentLocation();
        const FRotator ToCameraRotation = (CameraLocation - NiagaraSystemLocation).Rotation();
        LevelUpNiagaraComponent->SetWorldRotation(ToCameraRotation);

        LevelUpNiagaraComponent->Activate(true);
    }
}