본문 바로가기
프로그래밍

👨‍💻 [Unreal] 언리얼 엔진에서 프로젝타일 무브먼트 컴포넌트 (ProjectileMovementComponent) 란 무엇이고, 어떻게 활용할 수 있나요?

by 밝음의기둥 2024. 12. 27.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

언리얼 엔진에서 프로젝타일 무브먼트 컴포넌트 (ProjectileMovementComponent) 란 무엇이고, 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

언리얼 엔진에서 프로젝타일 무브먼트 컴포넌트 (ProjectileMovementComponent) 란 무엇이고, 어떻게 활용할 수 있나요?

답변 >

프로젝타일 무브먼트 컴포넌트(ProjectileMovementComponent)는 언리얼 엔진에서 발사체의 물리적 움직임을 처리하는 컴포넌트입니다. 주로 총알, 로켓, 화살, 던지는 물체와 같은 **발사체(Projectile)**의 궤적을 구현하는 데 사용됩니다.


1. 프로젝타일 무브먼트 컴포넌트의 특징

  • 속도와 가속도 기반 이동: 초기 속도, 방향, 중력 등을 기반으로 이동 궤적 계산.
  • 중력 및 물리 연산: 발사체의 궤적에 중력을 적용하여 사실적인 동작 구현.
  • 반사 및 튕김: 충돌 시 반사 또는 멈춤 동작을 설정 가능.
  • 네트워크 동기화: 멀티플레이어 환경에서 발사체 이동 동기화 지원.
  • 자동 비활성화: 발사체가 최대 거리나 시간에 도달하면 자동으로 비활성화.

2. 프로젝타일 무브먼트 컴포넌트 주요 속성

2.1 이동 속도 및 궤적 관련

  • InitialSpeed
    • 발사체의 초기 속도.
    • 예: 총알의 발사 속도.
  • MaxSpeed
    • 발사체의 최대 속도.

2.2 중력 관련

  • ProjectileGravityScale
    • 중력의 영향을 설정.
    • 0이면 중력 무시(예: 레이저 빔), 1이면 기본 중력 적용.

2.3 반사 및 충돌

  • bShouldBounce
    • 충돌 시 반사 여부.
  • Bounciness
    • 충돌 반사 강도(0~1). 1은 완벽한 반사.
  • Friction
    • 충돌 후 마찰력. 낮을수록 더 미끄러짐.

2.4 궤적 조정

  • Velocity
    • 초기 속도 벡터를 설정.
    • 발사체의 방향과 속도를 지정.
  • bRotationFollowsVelocity
    • 발사체가 이동 방향을 따라 회전할지 여부.

3. 프로젝타일 무브먼트 컴포넌트 생성 및 사용

3.1 블루프린트에서 설정

  1. 액터 클래스 생성:
    • 새로운 블루프린트 액터를 생성.
  2. 컴포넌트 추가:
    • Static Mesh Component(발사체의 외형)와 ProjectileMovementComponent 추가.
  3. 속성 설정:
    • Details 패널에서 InitialSpeed, MaxSpeed, ProjectileGravityScale 등 속성 조정.
  4. 발사 로직 작성:
    • 발사 방향을 Launch Velocity로 설정하여 발사체 이동 구현.

3.2 C++에서 설정

1) 컴포넌트 추가

헤더 파일:

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyProjectile.generated.h"

UCLASS()
class MYPROJECT_API AMyProjectile : public AActor
{
    GENERATED_BODY()

public:
    AMyProjectile();

protected:
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
    UStaticMeshComponent* ProjectileMesh;

    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
    UProjectileMovementComponent* ProjectileMovement;

public:
    void LaunchProjectile(const FVector& LaunchVelocity);
};

2) 컴포넌트 초기화

소스 파일:

#include "MyProjectile.h"
#include "GameFramework/ProjectileMovementComponent.h"

AMyProjectile::AMyProjectile()
{
    // 메시 컴포넌트 생성
    ProjectileMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ProjectileMesh"));
    RootComponent = ProjectileMesh;

    // 프로젝타일 무브먼트 컴포넌트 생성
    ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovement"));
    ProjectileMovement->InitialSpeed = 1500.0f;
    ProjectileMovement->MaxSpeed = 1500.0f;
    ProjectileMovement->ProjectileGravityScale = 1.0f; // 중력 적용
    ProjectileMovement->bShouldBounce = true;          // 충돌 시 반사
}

void AMyProjectile::LaunchProjectile(const FVector& LaunchVelocity)
{
    if (ProjectileMovement)
    {
        ProjectileMovement->Velocity = LaunchVelocity;
    }
}


4. 발사체 발사 로직

발사체를 특정 방향으로 발사하려면 초기 속도를 설정해야 합니다.

블루프린트

  1. 스폰된 액터의 Launch Velocity 설정:
    • AddActorWorldOffset 또는 AddImpulse 노드를 활용.
  2. 발사체 이동 구현:
    • 발사 방향과 속도를 계산하여 ProjectileMovementComponent에 전달.

C++

void AMyCharacter::FireProjectile()
{
    FVector SpawnLocation = GetActorLocation() + GetActorForwardVector() * 100.0f;
    FRotator SpawnRotation = GetActorRotation();

    // 발사체 스폰
    AMyProjectile* Projectile = GetWorld()->SpawnActor<AMyProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);

    // 발사체 속도 설정
    if (Projectile)
    {
        FVector LaunchVelocity = GetActorForwardVector() * 2000.0f;
        Projectile->LaunchProjectile(LaunchVelocity);
    }
}


5. 활용 사례

5.1 총알 발사

  • 초기 속도를 빠르게 설정하고 중력 효과를 제거.
  • 충돌 시 적에게 데미지를 입히고 소멸.

5.2 로켓 발사

  • 느린 초기 속도와 약간의 중력 적용.
  • 충돌 시 폭발 효과 생성.

5.3 수류탄

  • 포물선을 그리며 이동.
  • 일정 시간이 지나거나 충돌 시 폭발.

5.4 스킬 발사체

  • 마법이나 에너지 볼과 같은 특수 스킬.
  • 반사 효과를 활성화하여 물체에 튕기게 설정.

6. 디버깅 및 최적화

  • 디버그 궤적 확인:
    • ShowDebug Projectile 명령어를 사용하여 발사체의 궤적 시각화.
  • 충돌 문제 해결:
    • 발사체의 콜리전 설정 확인(충돌 채널, 반사 여부).
  • 최적화:
    • InitialLifeSpan 속성을 설정하여 발사체가 일정 시간이 지나면 소멸하도록 설정.

프로젝타일 무브먼트 컴포넌트는 발사체의 물리적 움직임을 간단하고 효율적으로 구현할 수 있도록 도와주는 강력한 도구입니다. 기본 설정만으로도 다양한 이동 패턴을 구현할 수 있으며, C++와 블루프린트를 통해 세부적으로 커스터마이징하여 더 복잡한 발사체 동작을 구현할 수 있습니다.



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형