Showing

[언리얼] p = p0 + vt 이동로직 블루프린트와 c++로 작성하기 본문

Unreal

[언리얼] p = p0 + vt 이동로직 블루프린트와 c++로 작성하기

RabbitCode 2023. 9. 26. 15:11

P0는 위치를 표현하기 위한 자료형으로 벡터를 사용한다.

 

위의 블루프린트 내용을 c++로 tick 함수 내로 만드면 아래와 같다.

// Called every frame
void AActor_Coding::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	// 앞으로 계속 이동하고 싶다.
	// P = P0 + vt
	FVector P0 = GetActorLocation();
	FVector vt = GetActorForwardVector() * 500 * DeltaTime;
	FVector P = P0 + vt;
	SetActorLocation(P);
}

상세한 주석은 아래와 같다.

// Called every frame
void AActor_Coding::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	// 앞으로 계속 이동하고 싶다.
	// P = P0 + vt
	// 현재 위치를 구하자
	FVector P0 = GetActorLocation();
	// 이동 속도를 구하자
	FVector vt = GetActorForwardVector() * 500 * DeltaTime;
	// 이동 시키자
	FVector P = P0 + vt;
	SetActorLocation(P);
}

Move라는 함수로 직접 정의해보자

#pragma once

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

UCLASS()
class CODING_API AActor_Coding : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AActor_Coding();
    
protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	// 특정 방향으로 이동하는 함수(기능)을 만들고 싶다.
	// 반환 자료형 함수이름(매개변수...)
	void Move(FVector Direction);
};
#include "Actor_Coding.h"

// Sets default values
AActor_Coding::AActor_Coding()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}

void AActor_Coding::BeginPlay()
{
	Super::BeginPlay();
}

// Called every frame
void AActor_Coding::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	// 함수이름(인자값);
	Move(GetActorForwardVector());
}

void AActor_Coding::Move(FVector Direction)
{
	// 앞으로 계속 이동하고 싶다.
	// // P = P0 + vt
	// // 현재 위치를 구하자
	FVector P0 = GetActorLocation();
	// 이동 속도를 구하자
	float t = GetWorld()->DeltaTimeSeconds;
	FVector vt = Direction * 500 * t;
	// 이동 시키자
	FVector P = P0 + vt;
	SetActorLocation(P);
}

이렇게 만든 C++ Move 함수 존재를 언리얼엔진이 알 수 있도록 

UFUNCTION(BlueprintCallable) 를 작성해준다.
void Move(FVector Direction);

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

#pragma once

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

UCLASS()
class CODING_API AActor_Coding : public AActor
{
	GENERATED_BODY()
	
public:	
	AActor_Coding();

protected:
	virtual void BeginPlay() override;

public:	
	virtual void Tick(float DeltaTime) override;

	UFUNCTION(BlueprintCallable)
	void Move(FVector Direction);
};

컴파일!
블루프린트로 돌아가는지 확인하기 위해 주석처리!
테스트용 액터를 구로 만들어주었다

직접 제작한 MOVE 함수를 블루프린트에서 컴파일한 뒤에, 공이 올라가는 것을 확인할 수 있다!