BP에서 자주보던 Delay 함수를 C++로 가져와서 쓰자니
매 번 타이머핸들 호출하고 델리게이트 넣고 하는게 귀찮아서
어느 클래스에서도 쉽게 사용할 수 있도록 만들어봤어요
#pragma once
// Engine
#include <CoreMinimal.h>
#include <Math/UnrealMath.h>
#include <Engine/World.h>
#include <TimerManager.h>
/**
*
*/
class PAPERNINJA_API PNFunctionLibrary
{
public:
// 벡터에서 Z를 0으로 만드는 메서드
static FVector flatten_vector(FVector value_in)
{
FVector return_vector;
float X, Y, Z;
X = value_in.X;
Y = value_in.Y;
Z = 0.f;
return_vector = FVector(X, Y, Z);
return return_vector;
}
// std::function을 써서 멤버함수를 캡슐화 시킨 후 인스턴스랑 함께 전달함
static void delay_function(const std::function<void()>& function_in, float delay_time_in, UWorld* world_in)
{
if (IsValid(world_in))
{
FTimerHandle timer_handle;
FTimerDelegate timer_delegate;
timer_delegate.BindLambda([function_in, world_in, &timer_handle]()
{
function_in();
world_in->GetTimerManager().ClearTimer(timer_handle);
});
world_in->GetTimerManager().SetTimer(timer_handle, timer_delegate, delay_time_in, false);
}
}
};
static void delay_function 함수만 보세요~
핵심은 std::function을 사용해서 호출할 함수를 캡슐화 하고 해당 함수의 클래스를 인스턴스화해서 묶어주는 것입니다.
사용법)
PNFunctionLibrary::delay_function([this]() { your_function_name(); }, 5.f, GetWorld()); //함수 이름, 지연시간, 월드
'언리얼엔진 > UE5' 카테고리의 다른 글
UE5 액터의 BeginPlay 호출 순서에 대해서 (0) | 2023.05.12 |
---|---|
UE5 C++ enhanced input 플레이어 컨트롤러에 적용하기 (0) | 2023.01.17 |