유니티 Lerp 함수 개념설명

반응형

 

Unity의 Lerp란?

Lerp는 Linear Interpolation(선형 보간)의 줄임말입니다.
쉽게 말해,

“A부터 B까지 일정한 속도로 부드럽게 움직이게 해주는 함수”입니다.

 

Unity에서는 주로 아래와 같이 사용됩니다:

Vector3.Lerp(start, end, t)
  • start: 시작 위치
  • end: 도착 위치
  • t: 0부터 1 사이의 비율 값
    • t = 0이면 start 위치
    • t = 1이면 end 위치
    • t = 0.5이면 두 위치의 정확히 중간

예시 1 – 단순한 위치 이동

Vector3.Lerp(new Vector3(0, 0, 0), new Vector3(0, 10, 0), 0.3f)

이 코드는 (0, 0, 0)에서 (0, 10, 0)까지의 30% 위치인 (0, 3, 0)을 반환합니다.

즉, Lerp는 두 값 사이를 비율에 따라 계산해주는 함수입니다.


시간에 따른 이동: 코루틴과 Lerp

게임 오브젝트를 시간에 따라 부드럽게 이동시키고 싶다면, Lerp의 t 값을 시간 흐름에 맞춰 점점 증가시키면 됩니다.

IEnumerator Move()
{
    Vector3 start = transform.position;
    Vector3 end = start + new Vector3(0, 1, 0); // 위로 1만큼

    float elapsedTime = 0f;
    float duration = 1f; // 1초간 이동

    while (elapsedTime < duration)
    {
        float t = elapsedTime / duration;
        transform.position = Vector3.Lerp(start, end, t);
        elapsedTime += Time.deltaTime;
        yield return null;
    }

    transform.position = end;
}

왜 elapsedTime / duration을 쓰는 걸까?

여기서 핵심은 이 부분입니다:

float t = elapsedTime / duration;

이 수식은 진행률을 의미합니다:

전체 작업 시간 중에 지금까지 몇 %가 진행되었는가?


왜 elapsedTime이 분자이고 duration이 분모인가?

기본적인 비율 공식 때문입니다:

진행률 = 현재까지 진행된 양 / 전체 양

시간으로 적용하면:

진행률 = 경과 시간 / 전체 시간 = elapsedTime / duration

예를 들어,

  • 1초 중 0.25초가 지났다면 → 0.25 / 1 = 0.25 (25%)
  • 2초 중 1초가 지났다면 → 1 / 2 = 0.5 (50%)

반대로 계산하면:

t = duration / elapsedTime; // ❌

시간이 지나면서 t 값이 1보다 훨씬 커지고, Lerp가 의도치 않은 동작을 하게 됩니다.


정리

항목 의미 값

elapsedTime 현재까지 흐른 시간 0.5초
duration 전체 소요 시간 2초
t 진행 비율 0.5 / 2 = 0.25 (25%)

Lerp(start, end, t)에서 t는 반드시 0에서 1 사이의 진행률이어야 합니다.
그래서 elapsedTime / duration 형태가 정답입니다.


결론

Unity의 Lerp를 사용할 때 t = elapsedTime / duration을 사용하는 이유는
단순합니다. **"지금까지 얼마나 진행됐는지 비율로 나타내기 위해서"**입니다.

이 공식 덕분에 우리는 오브젝트를 프레임마다 조금씩 움직이며 부드러운 애니메이션 효과를 만들 수 있습니다.


원하면 여기 이어서 Fade, Scale, Color 변화 등에 Lerp가 어떻게 쓰이는지 확장해주는 후속 글도 구성해줄게!

반응형