Lerp 함수는 두 값 A와 B 사이의 특정 비율로 중간 값을 계산하는 함수다. 비율 값은 0~1 사이로 입력되며, 이 비율이 0이면 A, 1이면 B를 반환한다. 비율 값이 0과 1 사이에 있다면, 두 값의 중간 값을 반환한다.
Lerp의 수학적 표현
Result = A + (B - A) * Alpha
A: 시작 값B: 끝 값Alpha: 0~1 사이의 비율 (보간 정도)Alpha의 범위
- 0이면
A값을 반환한다.- 1이면
B값을 반환한다.- 0과 1 사이 값이면,
A와B사이의 중간 값을 반환한다.
1) FMath::Lerp (float 값 보간)
FMath::Lerp는 두 실수(float) 값 사이를 보간할 때 사용한다.
float StartValue = 0.0f;
float EndValue = 100.0f;
float Alpha = 0.5f; // 중간값
float Result = FMath::Lerp(StartValue, EndValue, Alpha);
// Result = 50.0f (StartValue와 EndValue의 정확히 중간값)
활용 예시
2) FVector 보간 (VInterpTo)
FVector 값을 보간할 때는 FMath::Lerp 대신 VInterpTo를 사용하는 것이 일반적이다. VInterpTo는 일정 속도로 보간을 수행하며, 델타 타임(프레임 간 시간)을 고려하여 자연스러운 애니메이션 효과를 제공한다.
FVector CurrentPosition = GetActorLocation();
FVector TargetPosition = FVector(300.f, 200.f, 100.f);
float DeltaTime = GetWorld()->GetDeltaSeconds();
float InterpSpeed = 5.0f;
FVector NewPosition = FMath::VInterpTo(CurrentPosition, TargetPosition, DeltaTime, InterpSpeed);
SetActorLocation(NewPosition);
CurrentPosition이 TargetPosition에 가까워진다.InterpSpeed 값이 클수록 빠르게 목표 위치에 도달한다.Alpha 범위 (0~1)
Alpha 값은 일반적으로 0에서 1 사이 값이어야 한다.DeltaTime 기반 보간
DeltaTime을 기반으로 보간 속도를 조절해야 한다. 이를 위해 InterpTo 계열 함수를 사용하는 것이 적합하다.무한 루프 방지
Alpha 값이 1에 가까워질수록 보간 변화가 미미해진다. 따라서 목표 값 근처에서 루프를 멈추는 로직을 추가하는 것이 좋다.if (FVector::Dist(CurrentPosition, TargetPosition) < 1.0f)
{
// 보간 종료
}