Lerp ( Linear Interpolation )
시작값과 목표값 사이를 비율 ( t ) 에 따라 선형적으로 보간하는 함수이다.
Lerp ( a , b , t ) 는 t = 0 일 때 a 를 반환 , t = 1 일 때 b 를 반환하며
0 ~ 1 사이의 t 값으로 두 값 사이를 비율 기반으로 부드럽게 이동시킨다.
사용하면 좋을 상황
- 오브젝트의 위치 , 회전 , 색상 , 크기 등을 부드럽게 변화시킬 때
- 카메라의 이동이나 페이드 인 / 아웃 같은 연출 효과
- 시간 기반 보간이 필요할 때 ( Time.deltaTime 과 함께 사용한다 )
예시 코드
using UnityEngine;
public class LerpExample : MonoBehaviour
{
public Transform startPoint;
public Transform endPoint;
public float speed = 1f;
private float t = 0f;
void Update()
{
// t를 0에서 1까지 증가시키며 보간
t += Time.deltaTime * speed;
transform.position = Vector3.Lerp(startPoint.position, endPoint.position, t);
}
}
주의할 점
- t 가 0 ~ 1 범위를 넘으면 목표값을 초과한다 → Mathf.Clamp01()로 제한 필요
- 일정 속도 이동이 아니라 , 비율 기반으로만 움직인다 (속도 일정하지 않다)
- 매 프레임마다 t 를 누적 증가시켜야 자연스럽다
MoveTowards
현재 값에서 목표 값으로 일정한 속도로 접근시키는 함수이다
MoveTowards ( current, target, maxDelta ) 는 한 프레임당 maxDelta 만큼 목표값에 가까워진다.
목표에 도달하면 더 이상 움직이지 않는다.
사용하면 좋을 상황
- 일정 속도로 이동하는 오브젝트를 구현할 때
└ 적이 플레이어를 향애 일정 속도로 다가올 때 - 거리 기반 이동이 필요할 때
- 속도 제어가 중요한 상황 ( 가속 / 감속 없는 균일한 이동 )
예시 코드
using UnityEngine;
public class MoveTowardsExample : MonoBehaviour
{
public Transform target;
public float speed = 5f;
void Update()
{
// 매 프레임 일정 속도로 목표 위치에 접근
transform.position = Vector3.MoveTowards(
transform.position,
target.position,
speed * Time.deltaTime
);
}
}
주의할 점
- maxDelta 를 너무 크게 설정하면 한 번에 목표를 뛰어넘는다 ( 하지만 함수 내부에서 자동 보정된다 )
- 속도 기반 이동이라 , 거리 비율( t ) 보간과는 다르다
- SmoothDamp 나 Lerp 보다 덜 부드럽지만 일정한 속도를 유지 가능하다
정리
Lerp : 두 값 사이를 비율( t )로 선형 보간하는 함수로 , 부드러운 전환에 사용
MoveTowards : 현재 위치에서 목표 위치까지 일정한 속도로 점진적으로 이동시키는 함수
| 항목 | Lerp | MoveTowards |
| 기준 | 비율 ( t ) | 거리 ( maxDelta ) |
| 속도 | 일정하지 않다 | 일정하다 |
| 종료 조건 | t >= 1 | current == target |
| 부드러움 | 부드럽지만 시간에 의존 | 일정하고 직선적이다 |
| 자주 쓰는 곳 | 카메라 , 색상 , 회전 | 적 AI , 이동 경로 |
'🧊Unity Basic > 수학&보정함수' 카테고리의 다른 글
| Interpolation (0) | 2025.10.19 |
|---|---|
| Clamp (0) | 2025.10.19 |