UE5 몬스터 사망 연출 구현 방법

개발자 이야기/UE5 게임 개발 노트

UE5 몬스터 사망 연출 구현 방법

kilius 2025. 2. 4. 12:04
728x90
반응형

게임을 개발할 때 몬스터가 사망했을 때의 연출은 플레이어의 몰입감을 높이는 중요한 요소 중 하나입니다. 단순히 몬스터가 사라지는 것이 아니라, 다양한 시각적 효과를 활용하면 게임의 완성도를 높일 수 있습니다. Unreal Engine 5(UE5)를 사용하여 몬스터의 사망 연출을 다양하게 구현하는 몇 가지 방법을 소개합니다.

 

1. 페이드아웃 (투명도 조절)

개요

페이드아웃(Fade-out) 방식은 몬스터가 점점 투명해지면서 사라지는 연출입니다. 부드럽게 사라지는 느낌을 줄 수 있으며, 공포 게임이나 몽환적인 분위기를 연출할 때 유용합니다.

구현 방법

Unreal Engine에서 UMaterialInstanceDynamic을 사용하여 몬스터의 머티리얼(Material)의 불투명도를 조절할 수 있습니다.

코드 예제

void AMyMonster::DisappearEffect()
{
    UMaterialInstanceDynamic* DynMat = Mesh->CreateAndSetMaterialInstanceDynamic(0);
    if (!DynMat) return;

    float FadeDuration = 2.0f;
    float StartOpacity = 1.0f;
    float EndOpacity = 0.0f;

    FTimerHandle TimerHandle;
    GetWorldTimerManager().SetTimer(TimerHandle, [this, DynMat, StartOpacity, EndOpacity]()
    {
        static float ElapsedTime = 0.0f;
        ElapsedTime += GetWorld()->DeltaTimeSeconds;
        float Alpha = FMath::Clamp(ElapsedTime / FadeDuration, 0.0f, 1.0f);
        float NewOpacity = FMath::Lerp(StartOpacity, EndOpacity, Alpha);

        DynMat->SetScalarParameterValue("Opacity", NewOpacity);

        if (Alpha >= 1.0f)
        {
            Destroy();
        }

    }, 0.05f, true);
}

추가 효과

  • 페이드아웃 도중 연기 또는 빛이 퍼지는 파티클 효과를 추가할 수 있습니다.
  • 사운드 이펙트와 함께 사용하면 더욱 자연스러운 연출이 가능합니다.

 

2. 스케일 감소 (Shrink 효과)

개요

몬스터의 크기를 점점 줄여서 소멸하는 연출입니다. 단순하면서도 몬스터가 먼지가 되어 사라지는 듯한 느낌을 줄 수 있습니다.

구현 방법

SetActorScale3D()를 사용하여 점점 크기를 줄이면서 사라지게 만듭니다.

코드 예제

void AMyMonster::ShrinkEffect()
{
    float Duration = 2.0f;
    FVector StartScale = GetActorScale3D();
    FVector EndScale = FVector(0.0f);

    FTimerHandle TimerHandle;
    GetWorldTimerManager().SetTimer(TimerHandle, [this, StartScale, EndScale]()
    {
        static float ElapsedTime = 0.0f;
        ElapsedTime += GetWorld()->DeltaTimeSeconds;
        float Alpha = FMath::Clamp(ElapsedTime / Duration, 0.0f, 1.0f);
        FVector NewScale = FMath::Lerp(StartScale, EndScale, Alpha);

        SetActorScale3D(NewScale);

        if (Alpha >= 1.0f)
        {
            Destroy();
        }
    }, 0.05f, true);
}

추가 효과

  • 크기가 작아지면서 먼지가 되어 사라지는 파티클 효과를 추가할 수 있습니다.

 

3. 폭발 효과 (Explosion)

개요

몬스터가 폭발하며 사라지는 연출입니다. 액션 게임이나 SF 게임에서 강렬한 연출을 원할 때 적합합니다.

구현 방법

Niagara 또는 Cascade 시스템을 활용하여 폭발 효과를 적용합니다.

코드 예제

void AMyMonster::ExplodeEffect()
{
    if (ExplosionEffect)
    {
        UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), ExplosionEffect, GetActorLocation());
    }
    Destroy();
}

추가 효과

  • 폭발 사운드를 추가하여 더욱 극적인 연출이 가능합니다.
  • 폭발 후 충격파나 주변 오브젝트가 반응하는 물리 효과를 추가하면 더욱 사실적인 연출이 됩니다.

 

4. 블랙홀 흡수 (Gravity 효과)

개요

몬스터가 특정 지점으로 빨려 들어가면서 사라지는 연출입니다. 어두운 분위기의 게임에서 신비로운 연출을 할 때 사용할 수 있습니다.

구현 방법

SetActorLocation()을 사용하여 몬스터를 특정 지점으로 이동시키며 점점 작아지게 만듭니다.

코드 예제

void AMyMonster::BlackholeEffect()
{
    FVector CenterPoint = GetActorLocation() + FVector(0, 0, -100);

    FTimerHandle TimerHandle;
    GetWorldTimerManager().SetTimer(TimerHandle, [this, CenterPoint]()
    {
        static float ElapsedTime = 0.0f;
        ElapsedTime += GetWorld()->DeltaTimeSeconds;
        float Alpha = FMath::Clamp(ElapsedTime / 2.0f, 0.0f, 1.0f);

        FVector NewLocation = FMath::Lerp(GetActorLocation(), CenterPoint, Alpha);
        SetActorLocation(NewLocation);

        if (Alpha >= 1.0f)
        {
            Destroy();
        }
    }, 0.05f, true);
}

추가 효과

  • 몬스터가 빨려 들어가는 과정에서 주변 공간이 왜곡되는 효과를 추가할 수 있습니다.

 

5. 디졸브 효과 (Dissolve)

개요

몬스터가 점점 분해되어 사라지는 연출입니다. SF, 호러, 판타지 등 다양한 장르에서 활용할 수 있습니다.

구현 방법

Dissolve 머티리얼을 사용하여 점진적으로 사라지게 만듭니다.

코드 예제

void AMyMonster::DissolveEffect()
{
    UMaterialInstanceDynamic* DynMat = Mesh->CreateAndSetMaterialInstanceDynamic(0);
    if (!DynMat) return;

    float DissolveTime = 2.0f;
    float StartDissolve = 0.0f;
    float EndDissolve = 1.0f;

    FTimerHandle TimerHandle;
    GetWorldTimerManager().SetTimer(TimerHandle, [this, DynMat, StartDissolve, EndDissolve]()
    {
        static float ElapsedTime = 0.0f;
        ElapsedTime += GetWorld()->DeltaTimeSeconds;
        float Alpha = FMath::Clamp(ElapsedTime / DissolveTime, 0.0f, 1.0f);
        float DissolveValue = FMath::Lerp(StartDissolve, EndDissolve, Alpha);

        DynMat->SetScalarParameterValue("DissolveAmount", DissolveValue);

        if (Alpha >= 1.0f)
        {
            Destroy();
        }
    }, 0.05f, true);
}

이제 몬스터 사망 연출을 다양하게 적용할 수 있습니다!

728x90
반응형