Unreal Engine/기능 구현 / / 2025. 6. 16. 14:51

[Unreal Engine 5] Lerp

 

 

.h

 

.cpp

#핵심 함수

- FMath::VInterConstantTo(현재 위치, 목표 위치, 델타 타임, 이동속도)

- 현재 위치에서 목표 위치로 이동하는 데 얼마의 속도로 이동할거냐.

- 델타 타임을 넣어주는 이유는 FMath가 델타 타임을 직접 호출할 방법이 없어서

 

목표 위치로 이동할 때, 순간이동하듯이 사라지는게 아니라 부드럽게 이동하도록 하기 위해 특정 속도로 두 벡터 사이를 보간(Interpolate)한다.

 

Vector Interpolate Constant To 

Q. 왜 상수(Constant)여야 하는가?

A. 일정한 속도로 이동시키고 싶어서. Const를 붙이지 않으면 목표 위치에 가까워질수록 느려진다. 즉, 감속이 발생한다.

 

 

Speed = 총 거리(목표 위치 - 최초 위치) / 총 시간

여기서 핵심은 거리를 구할 때, 현재 위치가 아니라 최초 위치에서 목표 위치까지 거리를 계산하여 항상 '총 거리'로 스피드를 구하는 것

 

그러면 FMath::VInterConstantTo()에서

1. 현재 위치에서 목표 위치까지 이동할 방향 벡터를 구하고

- Direction = Normalize(TargetLocation - CurrentLocation)

2. 이동할 거리를 계산하고

- MoveDistance = Speed * DeltaTime

3. 최종적으로 이동할 새 위치를 계산한다.

- NewLocation = CurrentLocation + (Direction * MoveDistance)

4. (예외처리) 목표 위치를 초과했다면 목표 위치로 조정한다.

- if (abs(NewLocation.Length()) > abs(TargetLocation.Length())) 

    return TargetLocation

 

 

 

Q. 왜 AddActorLocation이 아니라 SetActorLocation인가?

A.  FMath::VInterConstantTo()의 결과값이 다음 프레임에 액터가 정확히 위치해야 할 월드 좌표이기 때문에.

이동량(Vector)가 아니라 이동한 위치(Point)를 반환한다.

 

 

 

 

 

 

 

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유