"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
언리얼 엔진에서 프로젝타일 무브먼트 컴포넌트 (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 블루프린트에서 설정
- 액터 클래스 생성:
- 새로운 블루프린트 액터를 생성.
- 컴포넌트 추가:
- Static Mesh Component(발사체의 외형)와 ProjectileMovementComponent 추가.
- 속성 설정:
- Details 패널에서 InitialSpeed, MaxSpeed, ProjectileGravityScale 등 속성 조정.
- 발사 로직 작성:
- 발사 방향을 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. 발사체 발사 로직
발사체를 특정 방향으로 발사하려면 초기 속도를 설정해야 합니다.
블루프린트
- 스폰된 액터의 Launch Velocity 설정:
- AddActorWorldOffset 또는 AddImpulse 노드를 활용.
- 발사체 이동 구현:
- 발사 방향과 속도를 계산하여 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
'프로그래밍' 카테고리의 다른 글
👨💻 [Unreal] 언리얼 엔진에서 스포닝 (Spawning) 이란 무엇이고, 어떻게 활용할 수 있나요? (3) | 2024.12.27 |
---|---|
👨💻 [Unreal] 언리얼 엔진에서 타이머 란 무엇이며, 어떻게 활용할 수 있나요? (4) | 2024.12.27 |
👨💻 [Unreal] 언리얼 엔진에서 캐릭터 무브먼트 컴포넌트 (CharacterMovementComponent) 란 무엇이고, 어떻게 활용할 수 있나요? (3) | 2024.12.27 |
👨💻 [Unreal] 언리얼 엔진에서 액터 컴포넌트란 무엇이며, 어떻게 활용할 수 있나요? (4) | 2024.12.26 |
👨💻 [Unreal] 언리얼 엔진에서 컴포넌트란 무엇이며, 어떻게 활용할 수 있나요? (4) | 2024.12.26 |