1. Lerp 란?
시작점에서 도착지점까지 선형 보간법을 이용해서 이동하는 방법을 Lerp라고 한다
2. Lerp 사용하기
[ Vector3.Lerp(시작 위치, 목표 위치, 0~1 사이의 보간값)]
Lerp안에 들어가는 매개변수를 살펴보자면
첫번째, 시작위치는 말그대로 오브젝트가 이동하는 위치의 값을 말한다
두번째,목표위치는 도달해야하는 위치를 말한다
3번째,보간값은 최종 좌표값으로 숫자가 1에 가까울 수록 빠른 속도로 오브젝트가 이동하고 0일 경우에는 오브젝트가 움직이지 않는다.
이런 Lerp는 특정 오브젝트를 목표 지점으로 움직이는데 많이 사용된다.
transform.position = Vector3.Lerp(startPos, endPos, Time.deltaTime);
3. 특정 위치 까지 이동하는 코드 작성하기
public Transform startPosition; //시작점
public Transform endPosition; //끝점
//사람들이 기본적으로 사용하는 Lerp 방식
private void Start()
{
//현재의 위치를 StartPosition 에 넣어줌
this.transform.position = startPosition.position;
}
private void Update()
{
//시작 좌표가 고정 좌표가 아니기 때문에 매번 달라질 수 있다
this.transform.position = Vector3.Lerp(this.transform.position, endPosition.position, 10 * Time.deltaTime);
}
위의 방법을 하면 목표 지점에 도달해가는 위치에 도착하기 전에 느려진다.
매번 새로운 시작값이 변경되면서 프레임의 거리가 계속 변경되기 때문에 좋은 방식은 아니라고 한다
위와 같은 코드는 특정한 시간 안에 목표에 도착해야할 경우,
위 코드는 시간을 수정하기 애매하고 컴퓨터 마다 도달하는 시간이 달라질 수 있기 때문에
아래 코드는 사용하여 lerpT의 숫자만 바꿔 특정 시간안에 도달 할 수 있도록 만들어 주는 방법이다.
public Transform startPosition; //시작점
public Transform endPosition; //끝점
float lerpT = 0.5f; //진행될 총 시간
float currentT = 0f;
private void Start()
{
//현재의 위치를 StartPosition 에 넣어줌
this.transform.position = startPosition.position;
}
private void Update()
{
//진행될 총 시간을 수정할 필요 없이 lerpT 변수의 값만 수정해도 원하는 초만큼 이동 하게 만들 수 있음
//고정 좌표를 넣어줌, 시작의 좌표가 매번 달라지는 불필요한 작업을 줄일 수있다.
currentT += Time.deltaTime;
if (currentT >= lerpT) //최대 0.5까지 증가함
{
currentT = lerpT;
}
//currentT/lerpT를 하면 0~1까지 서서히 증가 함
this.transform.position = Vector3.Lerp(startPosition.position, endPosition.position, currentT / lerpT);
}