정의
- 선형 보간을 이용하여 시작점과 도착점 사이 좌표를 T(0~1 사이 비율값)값으로 위치를 계산해 오브젝트를 부드럽게 이동
- 고정된 좌표 이동이 아닌 현재 시점과 도착 시점의 보간된 좌표로 이동하는 방법
- 시작점과 도착점 사이를 비율(T)을 기반으로 위치를 계산하여 이동하는 것
cf) Lerp = Linear Interpolation = 선형 보간 = 시작점과 끝점 사이 수치를 T(0~1 사이값)값에 따라 선형적으로 계산하는 것
cf) 왜 Vector3.Lerp 이동은 부드럽게 이동이 되는가?
-> 시작지점과 도착지점 사이를 비율(t)로 이동한다. 그렇기 때문에 시작점과 도착점 사이 무수히 많은 지점들을 프레임 단위로 이동한다. 이 지점들을 따라서 이동하니 부드럽게 이동하는 것처럼 보인다.
사용 이유
- 시작점에서 도착점까지 오브젝트를 부드럽게 이동시키기 위해서
- 유니티 물리 엔진(Rigidbody)를 사용하지 않고 단순 이동을 구현할 수 있기 때문에 (성능 최적화)
- 관성, 마찰력, 중력 영향 없이, 정확한 지점에 정확한 시간에 도착하게 만들기 위해서
- T값으로 진척도를 체크해 이벤트 처리를 하기 위해서
- 목적지 도착 전후 이벤트 처리
ex) 캐릭터가 목적지로부터 0.8(80%) 지점에 도착했을 때 먼지 이펙트를 나오게 하기.
ex) MP UI가 오른쪽에서 왼쪽으로 이동하면서 UI 색상의 투명도를 줄이고자 할때
- 목적지 도착 전후 이벤트 처리
언제 사용해야 하는가
- 시작점과 도착점이 정해진 이동을 할때
- UI가 특정 위치로 이동
- 부드러운 이동을 해야할때
- 물리 법칙이 필요없는 부드러운 이동
- 체력바, SP바가 서서히 차오르거나 줄어드는 연출을 만들고자 할때
- UI가 화면 밖에서 화면 안으로 들어오는 연출을 만들고자 할때
- 물리 법칙을 부드러운 이동으로 표현하고자 할때
- 총을 쐈을 때 반동 위치까지 Lerp, 반동 위치에서 원래 위치까지 Lerp
- 물리 법칙이 필요없는 부드러운 이동
- 카메라 이동처리를 할때
- 카메라가 캐릭터를 부드럽게 따라가게 할때
- 카메라가 특정 지점을 부드럽게 비추고자 할때
사용 방법
함수 정의
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);
- a = 시작 지점 위치 (Vector3)
- b = 도착 지점 위치 (Vector3)
- t = 비율 = 시작점(a)과 도착점(b) 사이 중 현재 어느 정도 진행되었는지에 대한 비율 (0~1 사이 값)
ex)
using UnityEngine;
public class Example : MonoBehavioour
{
public Vector3 startPos;
public Vector3 endPos;
private float _t;
public float duration;
public float timer = 0.0f;
private void Update()
{
if(timer < duration)
{
timer += Time.deltaTime;
_t = timer / duration; // 전체 시간 중 현재 얼마나 지났는지 비율
transform.position = Vector3.Lerp(startPos, endPos, _t);
}
}
}
Vector3.Lerp 이동 장점
- 유니티 물리엔진(Rigidbody)을 사용하지 않아 성능 최적화에 좋다.
- 원하는 시간에 도착 지점까지 이동할 수 있다.
- t값을 "현재 시간 / 목표 시간"으로 설정하여 Lerp를 해주면 원하는 시간에 도착 지점까지 이동할 수 있음
- 가속 이동, 감속 이동이 가능하다.
- t값을 제곱해 점점 빨라지게 만들 수 있다.
ex) Vector3.Lerp(startPos, endPos, t * t); - t값을 1 - (1 - t) * (1 - t)로 설정해 점점 느려지게 만들 수 있다.
ex) Vector3.Lerp(startPos, endPos, 1 - (1 - t) * (1 - t));
- t값을 제곱해 점점 빨라지게 만들 수 있다.
Vector3.Lerp 이동 단점
- 유니티 물리엔진(Rigidbody)을 사용하지 않아 물리 현상이 무시된다.
- 물리 현상 = 물체와 부딪히기, 중력, 관성, 마찰력 등
- 직선 이동만 가능하다.
- Update에 종속적이다.
- Update 메서드에서 매 프레임 t값이 계산된다.
만약 프레임 드랍이 발생한다면 t값 계산이 이상해져 움직임이 끊겨 보인다.
- Update 메서드에서 매 프레임 t값이 계산된다.
- 기계적으로 이동하는 것처럼 보인다.
'유니티 > 이동' 카테고리의 다른 글
| [유니티(Unity)] 좌표이동 - Vector3.MoveTowards 이동 (0) | 2026.05.05 |
|---|---|
| [유니티(Unity)] 좌표이동 - Vector3.Slerp 이동 (0) | 2026.05.04 |
| [유니티(Unity)] 좌표이동 - transform.localPosition 이동 (0) | 2026.05.02 |
| [유니티(Unity)] 좌표이동 - transform.Translate 이동 (0) | 2026.05.02 |
| [유니티(Unity)] 좌표이동 - transform.position 이동 (0) | 2026.05.02 |