본문 바로가기
유니티 공부/Unity

Unity- Mathf.Lerp()

by 코딩하는 돼징 2023. 5. 7.
반응형

Slerp에 대해 알아보러 가기

 

유니티 - Quaternion.Slerp()

Lerp에 대해 알아보러 가기 유니티 - Mathf.Lerp() 1. Lerp(Linear Interpolation) 두 값을 선형 보간(linear interpolation)하여 새로운 값을 계산 매개변수 a : 시작 값 b : 종료 값 t : a와 b 실수 값 사이의 보간 비율

code-piggy.tistory.com


1. Lerp(Linear Interpolation)

두 값을 선형 보간(linear interpolation)하여 새로운 값을 계산

매개변수

a : 시작 값

b : 종료 값

t : a와 b 실수 값 사이의 보간 비율

반환값

a + ( b - a ) * t


예시) a = 0, b = 10, t = 0.5 이라면


01 첫번째 새로운 값은  ( 0 + ( 10 - 0 ) * 0.5 ) =  5

따라서 a = 5, b = 10, t = 0.5 가 된다.


02 두번째 새로운 값은 ( 5 + ( 10 - 5 ) * 0.5 ) = 7.5 

따라서 a = 7.5, b = 10, t = 0.5 가 된다.


03 세번째 새로운 값은 ( 7.5 + ( 10 - 7.5) * 0.5) = 8.75

따라서 a = 8.75, b = 10, t = 0.5 가 된다.


2. Unity에서의 Lerp

Lerp을 사용하면 오브젝트의 위치를 부드럽게 움직일 수 있다.

a = Mathf.Lerp(a,b,0.5)

플레이어의 현재 위치를 a 목표위치를 b라고 가정하면 위의 그림들의 예시처럼 매 프라임마다 a값이 새로운 값으로 바뀌면서 목표지점으로 움직인다. 이를 더 자연스럽게 움직이기 위해서 Time.deltaTime을 사용한다.


a = Mathf.Lerp(a, b, Time.deltaTime * speed);

01 Time.deltaTime

Time.deltaTime은 이전 프레임에서 현재 프레임까지 걸린 시간이다. 각 프레임의 시간 간격이 다르기 때문에 위 처럼 t를 0.5로 고정시키게 되면 움직임 간격에 오차가 발생할 수 있다. 예를 들어 프레임의 변화량이 낮을 때는 플레이어의 움직임이 느려지고 높을때는 빨라지게 된다. 이를 방지 하기 위해서 Time.deltaTime 값을 곱하여서 각 프레임 간의 보간 속도를 일정하게 유지하도록 한다.


02 speed

speed는 보간 속도를 결정한다. 이를 통해서 속도를 조절할 수 있다.

 

반응형

댓글