정의
- 구면 선형 보간을 이용하여 시작점과 도착점 사이를 T(0~1 사이 비율값)값으로 위치를 계산해 원형 곡선으로 오브젝트를 이동
- 고정된 좌표 이동이 아닌 현재 시점과 도착 시점의 보간된 좌표로 이동하는 방법
- 시작점과 도착점 사이를 비율(T)을 기반으로 위치를 계산하여 이동하는 것
cf) Slerp = Spherical Linear Interpolation = 구면 선형 보간 = 시작점과 끝점 사이의 수치를 T값에 따라 원형 곡선으로 계산하는 것
cf) 왜 Vector3.Lerp 이동은 부드럽게 이동이 되는가?
-> 시작지점과 도착지점 사이를 비율(t)로 이동한다. 그렇기 때문에 시작점과 도착점 사이 무수히 많은 지점들을 프레임 단위로 이동한다. 이 지점들을 따라서 이동하니 부드럽게 이동하는 것처럼 보인다.
사용 이유
- 오브젝트를 곡선 모양으로 부드럽게 이동하기 위해서
- 중심점으로부터 거리를 유지하면서 이동하기 위해서
ex) 공전, 회전 운동
언제 사용해야 하는가
- 어떤 대상을 향해 곡선 모양으로 이동하기 위해서
ex) 해가 동쪽에서 서쪽으로 질 수 있도록 이동시킬 때, 마사일이 포물선 모양으로 목표물을 향해 이동시킬 때
사용 방법
함수 정의
public static Vector3 Slerp(Vector3 a, Vector3 b, float t);
- a = 시작 지점 위치 (Vector3)
- b = 도착 지점 위치 (Vector3)
- t = 비율 = 시작점(a)과 도착점(b) 사이 중 현재 어느 정도 진행되었는지에 대한 비율 (0~1 사이 값)
ex)
⚠️ Slerp는 (0, 0, 0)을 중심으로 좌표가 계산된다.
사실 Slerp는 시작점에서 도착점까지 곡선 모양으로 이동시켜주진 않는다. 왜냐하면 Slerp는 기본적으로 원점(0, 0, 0)을 중심으로 좌표가 계산되기 때문이다.
using UnityEngine;
public class Test : MonoBehaviour
{
public Transform startPos;
public Transform midPos;
public Transform endPos;
private float _duration = 1.5f;
private float _timer = 0.0f;
private void Update()
{
Vector3 sPos = startPos.position - midPos.position;
Vector3 ePos = endPos.position - midPos.position;
if(_timer < _duration)
{
_timer += Time.deltaTime;
float t = _timer / _duration;
Vector3 slerpPoint = Vector3.Slerp(sPos, ePos, t);
transform.position = slerpPoint;
}
}
}

💡 시작점에서 도착점까지 곡선 모양으로 이동시키려면 Slerp로 계산된 좌표에 중간점을 더해주면 된다.
중간점은 시작점과 도착점 사이 좌표이므로, Slerp로 계산된 좌표에 중간점을 더해주면 시작점에서 도착점까지 곡선으로 이동시킬 수 있다.

using UnityEngine;
public class Example : MonoBehaviour
{
public Transform startPos;
public Transform midPos;
public Transform endPos;
private float _duration = 1.5f;
private float _timer = 0.0f;
private void Update()
{
Vector3 sPos = startPos.position - midPos.position;
Vector3 ePos = endPos.position - midPos.position;
if(_timer < _duration)
{
_timer += Time.deltaTime;
float t = _timer / _duration;
Vector3 slerpPoint = Vector3.Slerp(sPos, ePos, t);
transform.position = slerpPoint + midPos.position;
}
}
}

Vector3.Slerp 이동 장점
- 부드러운 곡선 이동 연출이 가능하다.
- 시작점과 끝점이 중심점으로서부터 같은 거리에 있다면, 이동하는 동안 그 거리를 유지한다.
Vector3.Slerp 이동 단점
- Lerp보다 연산 비용이 비싸다. (Lerp는 단순 덧셈, 곱셈 연산, Slerp는 삼각함수 연산 수행)
- 기본적으로 원점(0, 0, 0)을 기준으로 좌표가 계산되기 때문에 필요하다면 프로그래머가 좌표를 보정하는 과정이 필요하다.
이 과정에서 계산 실수할 수도 있고 코드가 복잡해질 수도 있다.
ex) 시작점(0, 0, 0)에서 끝점(0, 2.5, 4)까지 포물선으로 이동하고자 할때 Slerp로 계산된 좌표에 중간점 좌표를 더해야 함. - 기계적으로 이동하는 것처럼 보인다.
'유니티 > 이동' 카테고리의 다른 글
| [유니티(Unity)] 좌표이동 - Vector3.SmoothDamp 이동 (0) | 2026.05.06 |
|---|---|
| [유니티(Unity)] 좌표이동 - Vector3.MoveTowards 이동 (0) | 2026.05.05 |
| [유니티(Unity)] 좌표이동 - Vector3.Lerp 이동 (0) | 2026.05.02 |
| [유니티(Unity)] 좌표이동 - transform.localPosition 이동 (0) | 2026.05.02 |
| [유니티(Unity)] 좌표이동 - transform.Translate 이동 (0) | 2026.05.02 |