액터를 특정 방향으로 움직이고 싶을 때! 

언리얼의 커브를 사용해서 다양한 방향으로 엑터를 움직이게 할 수 있다! 

Vector Curve를 C++으로 가져와서 사용하는 방법에 대해 알아보자! 

 

 

 

 

커브 (Curve / UCurvebase)는 보간되는 여러 포인트로 이루어진 트랙을 말하며, 

트랙은 시간과 값을 정의하는 키가 있다. 

커브는 키 사이를 보간해 타임라인의 특정 지점에 대한 값을 계산한다. 

 

Miscellaneous -> Curve 에서 생성 할 수 있다. 

 

 

Curve는 3가지가 있다. 

CurveFloat (UCurveFloat)

CurveLinearColor (UCurveLinearColor)

CurveVector (UCurveVector)

그 중에 CurveVector를 이용하여 액터를 움직여보도록 하자

 

 

Vector Curve를 생성하면 X축, Y축, Z축이 있다. 

가로축은 시간이고 새로축은 거리가 되겠다. 

Add key를 하여 원하는 방향으로 설정을 한다. 

 

 

 

Actor를 기반으로 C++ 클래스를 생성하였다.

헤더 파일에 Vector Curve를 담을 변수를 만들어주고

UPROPERTY(Editanywhere, Category = "Moving Cube")
UCurveVector* MovementCurve;

 

C++기반으로 Blueprint를 만들면 요렇게 내가 만든 Vector Curve를 할당해 줄 수 있다.

 

 

Vector Curve의 값을 가져와서 액터의 위치를 업데이트하는 함수를 만든다. 

void AMovingCube::MovePosition(FVector Value)
{
if(MovementCurve)
{
FVector curPos = InitialPosition + Value * 100.f;
SetActorLocation(curPos);
}
}

 


timeline vector track라는 함수 시그니처를 사용하는데

FOnTimelineVector TimelineCallback;
FTimeline CurveTimeline;

 

 

만들어둔 MovePosition 함수에 TimelineVector을 바인딩하고,

백터 보간을 타임라인에 추가 하고,

반복할지 정하고, 

처음부터 시작하게 하면 끝난다. 

TimelineCallback.BindDynamic(this, &AMovingCube::MovePosition);
CurveTimeline.AddInterpVector(MovementCurve, TimelineCallback);
CurveTimeline.SetLooping(true);
CurveTimeline.PlayFromStart();

 

 

아직은 다양한 활용을 하지 못하지만 

좀 더 익숙해지면 재미있게 쓸 수 있는 기능같다! 

 


 

참고 링크: 

TimeLines

Keys and Curves 

Opening Doors

FOnTimelineVector

 

Rudolufoo