< [UE5] ProjectileMovementComponent

언리얼엔진5/각종 지식

[UE5] ProjectileMovementComponent

Rocketbabydolls 2024. 6. 12. 19:08

 

ProjectileMovementComponent

    언리얼 엔진에서 탄환, 로켓, 화살 등과 같은 발사체의 운동을 처리하기 위한 컴포넌트입니다. 이 컴포넌트를 사용하면 발사체가 물리 법칙에 따라 자연스럽게 움직이고 상호작용하도록 만들 수 있습니다.

 

 

사용 예시

// Fill out your copyright notice in the Description page of Project Settings.


#include "Weapon/VITracerRound.h"
#include "Components/SphereComponent.h"
#include "GameFrameWork/ProjectileMovementComponent.h"

// Sets default values
AVITracerRound::AVITracerRound()
{
	Sphere = CreateDefaultSubobject<USphereComponent>(TEXT("Sphere"));

	Sphere->SetupAttachment(RootComponent);

	

	StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));

	StaticMesh->SetupAttachment(Sphere);
	StaticMesh->SetRelativeScale3D(FVector(8.75f, 0.5f, 0.5f));
	

	ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovement"));

	ProjectileMovement->SetUpdatedComponent(RootComponent);

	ProjectileMovement->InitialSpeed = 7000.0f;
	ProjectileMovement->Bounciness = 0;
	ProjectileMovement->Friction = 0;
	ProjectileMovement->InterpLocationTime = 0.05f;
	ProjectileMovement->ProjectileGravityScale = 0.0f;
	ProjectileMovement->InitialSpeed = 12000.f;

	StaticMesh->OnComponentHit.AddDynamic(this, &AVITracerRound::OnHitStaticMesh);
	Sphere->OnComponentHit.AddDynamic(this, &AVITracerRound::OnHitSphere);

	


}

void AVITracerRound::OnHitStaticMesh( UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
	Destroy();
	

}

void AVITracerRound::OnHitSphere(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
	Destroy();

}
FTransform TF;

TF.SetLocation(Muzzle->getComponentLocation);
				
UCameraComponent* FPPCamera = Cast<AVICharacter>(World->GetFirstPlayerController()->GetCharacter())->GetCamera();

TF.SetRotation(FPPCamera->GetComponentRotation().Quaternion());
TF.SetScale3D(FVector(0.05f, 0.05f, 0.05f));
				
World->SpawnActor<AActor>(TracerRoundRef, TF);

    

 

sphere 및 staticmesh, projectileMovementCompoent 를 부착 한 뒤 총구로부터 트랜스폼을 받아와 스폰액터를 하면 발사된다.