<유니티> Lerp 함수

상태
시작 전
담당자
날짜
숫자
0

Lerp 함수란?

Lerp 함수는 선형 보간(Linear Interpolation)의 줄임말로, 두 값 사이를 일정한 비율로 보간하는 함수입니다. 주로 Mathf.Lerp() 함수로 사용되며, Lerp(a,b,t)는 a에서 b까지의 값 사이를 t(0에서 1사이의 값)로 보간해줍니다. t가 0이면 a, 1이면 b, 그리고 그 중간 값일 경우 a와 b 사이의 값이 반환됩니다.
즉, 시작 값인 a와 끝 값인 b를 0과 1로 간주하여 원하는 중간 값 t 만큼 그 사이의 값을 반환해줍니다.
주로 오브젝트의 위치나 색상, 크기 등을 자연스럽게 변화시키는 데 사용됩니다. 예를 들어, 캐릭터가 두 지점 사이를 부드럽게 이동하도록 만들 때 유용합니다.

Lerp 함수 사용법

using UnityEngine; public class LerpTest : MonoBehaviour { Vector3 StartPos; // 시작 값 : a Vector3 TargetPos = new Vector3(0,5,0) // 끝 값 : b float CurrentTime = 0; // a와 b 사이를 선형보간하는 t private void Start() { StartPos = transform.position; } void Update() { CurrentTime += Time.deltaTime; // 시간에 따라 t 값 증가 transform.positon = Vector3.Lerp(StartPos, TargetPos, CurrentTime); } }
C#
복사
이런 식으로 코드를 작성하게 되면 처음 시작은 CurrentTime이 0이므로 a값인 0을 반환하겠지만 시간이 지남에 따라 Current Time이 증가하게되므로 점점 증가되는 t 값을 반환하다가 결국 목표 위치에 도달하게 되면 1을 반환할 것입니다.
그럼 만약 원하는 시간 안에 목표 위치에 도착하게 하려면 어떻게 해야할까요? 끝 값인 b를 반환해야 목표 위치가 나오겠죠?
그러려면 t 값이 1이 되면 됩니다.
using UnityEngine; public class LerpTest : MonoBehaviour { Vector3 StartPos; // 시작 값 : a Vector3 TargetPos = new Vector3(0,5,0) // 끝 값 : b float CurrentTime = 0; // a와 b 사이를 선형보간하는 t public float MoveTime = 5.0f; // 움직이는 시간을 5초로 설정 private void Start() { StartPos = transform.position; } void Update() { CurrentTime += Time.deltaTime; // 시간에 따라 t 값 증가 transform.positon = Vector3.Lerp(StartPos, TargetPos, CurrentTime / MoveTime); } }
C#
복사
이렇게 코드를 작성하게 되면 움직이는 MoveTime은 5.0f이고 CurrentTime을 MoveTime으로 나누었으므로 CurrentTime / 5.0f가 될 것입니다. 그렇다면 CurrentTime이 5.0f가 되었을 때 1이 되므로 목표 위치를 반환하게 될 것입니다.