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가 어떻게 쓰이는지 확장해주는 후속 글도 구성해줄게!
