반응형
Slerp에 대해 알아보러 가기
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는 보간 속도를 결정한다. 이를 통해서 속도를 조절할 수 있다.
반응형
'유니티 공부 > Unity' 카테고리의 다른 글
Unity- Quaternion.Slerp() (0) | 2023.05.08 |
---|---|
Unity- Vector3.ProjectOnPlane() (2) | 2023.05.08 |
Unity- Update vs FixedUpdate vs LateUpdate (0) | 2023.05.07 |
Unity - 게임 에셋 사이트들 추천! (0) | 2023.03.08 |
Unity - Bind event, Extension Method (0) | 2023.02.22 |
댓글