선형 보간
- 두 점 a,b 사이의 값(c)를 구하기 위해 두 점을 연결한 직선을 만들어 사이의 값을 계산하는 방법.
- 유니티에서는 값(수치)이 부드럽게 변경되고 싶을 때 사용
Lerp
- 유니티에서 주로 사용하는 선형 보간법
Mathf.Lerp() : 숫자간의 선형보간
Vector2.Lerp() : Vector2간의 선형보간
Vector3.Lerp() : Vector3간의 선형보간
Quaternion.Lerp() : Quaternion간의 선형보간(회전)
# Mathf.Lerp(float a, float b, float t)
a, b 사이의 t(0~1 사이의 실수)만큼 위치한 값 c를 선형 보간을 통해 구한다.
여기서의 t는 퍼센트(%) 개념이므로 t=0일 때는 결과값으로 a를, t=1일 때는 b를 반환한다.
# 부드러운 움직임 구현하기
- Update() 함수 안에 넣어 프레임마다 호출하여 부드러운 움직임을 구현한다.
- 현재 위치를 a, 목표 지점을 b라 하고 t=0.5라 하면 매 프레임마다 a와 b의 중간지점인 c로 이동할 것이다. 코드를 그림으로 나타낸 모습은 아래와 같다.
void Update() {
a = Mathf.Lerp(a, b, 0.5f);
}
# Time.deltaTime과 speed 변수
float speed = 2;
void Update()
{
a = Mathf.Lerp(a, b, Time.deltaTime * speed);
}
Time.deltaTime은 프레임 간의 시간 변화량을 말한다. 컴퓨터 환경에 따라 다르지만 보통 0.016~0.18초 사이이며, 프레임 별 정확한 값은 Update()에서 Debug.Log(Time.deltaTime);을 통해 확인할 수 있다. Time.deltaTime이 필요한 이유는 컴퓨터 성능에 따라 한 프레임에 나오는 결과 값이 달라지지 않도록 값을 보장해주기 때문이다.
Lerp()에서 변수 t에 고정값을 사용하면 각 프레임의 시간 간격이 일정하지 않기 때문에 오차가 발생할 수 있다. 따라서 오차를 없애기 위해 Time.deltaTime으로 각 프레임의 정확한 시간 변화량을 구해서 이를 통해 정확한 이동 변화량 값을 계산하기 위해 선형 보간에 Time.deltaTime을 사용하는 것!!
'기타 > Unity' 카테고리의 다른 글
Canvas UI 안드로이드 스크린 사이즈와 맞추기 (0) | 2020.07.30 |
---|---|
Inspector 창에서 제목 작성하기 : HeaderAttribute (0) | 2020.07.09 |
[유니티C#] Coroutine에 대하여 (0) | 2020.07.08 |