728x90

게임 제작 시 두 값을 선형적으로 보간하면 유용한 경우가 있다.
선형 보간은 Lerp라는 함수를 통해 이루어진다.

선형 보간은 주어진 두 값 사이의 일정 비율에 해당하는 값을 찾는 것
예를 들어 숫자 3과 5를 50%로 선형적으로 보간한 결과는 숫자 4이다.
4는 3과 5 사이의 50% 지점에 있기 때문

Unity에는 다양한 유형에 사용 가능한 여러 Lerp 함수가 있다.

// 이경우, 결과 = 4
float result = Mathf.Lerf(3f,5f,0.5f);

 

Mathf.Lerp 함수는 3개의 float 파라미터를 사용

  • 하나는 보간 시작값
  • 다른 하나는 보간 끝 값
  • 마지막 float는 보간 거리를 나타낸다.
    이 경우 보간 값은 0.5로 50%를 의미
    값이 0이면 이 함수는 '시작'값을 반환하고, 값이 1이면 '끝' 값을 반환

 

Lerp함수의 다른 예로는 Color.Lerp와 Vector3.Lerp가 있다.
이 함수는 Mathf.Lerp와 완전히 동일하게 작동하지만 시작 및 끝 값이 Color 유형과 Vector3 유형이다.
각각의 경우에 세 번째 파라미터는 그대로 보간되는 양을 나타내는 float이다.
이 두 함수의 결과는 각각 특정 색상 2개를 블렌딩한 색상, 특정 벡터 2개 사이의 일정 비율에 해당하는 벡터가 되겠다.

Vector3 from = new Vector3 (1f,2f,3f);
Vector3 to = new Vector3 (5f,6f,7f);

// 이 경우 결과 = (4,5,6)
Vector3 result = Vector3.Lerp(from,to,0.75f);

이 경우 결과는 (4,5,6)이다.
4는 1과 5사이의 75% 지점에 있고, 5는 2와 6사이의 75% 지점에 있으며, 6은 3과 7의 75% 지점에 있기 때문

Color.Lerp를 사용하는 경우에도 동일한 원이 적용된다.
Color 구성에서 색상은 빨간색, 파란색, 초록색, 알파를 나타내는 4개의 float로 표현
Lerp 사용 시 이러한 float는 Mathf.Lerp 및 Vector3.Lerp와 마찬가지로 보간

상황에 따라 시간이 지나며 값을 매끄럽게 전환하는 데 Lerp 함수를 사용할 수 있음.

 

 

void Update()
{
    light.intensity = Mathf.Lerp(light.intensity,8f,0.5f);
}

0에서 시작하는 광원 강도는 첫 Update 호출 후 4로 설정되며 그 다음 프레임은 6,7,7.5 등으로 설정
따라서 여러 프레임을 거치면서 광원 강도는 8로 향하게 되지만 변경 속도는 목표에 다가갈수록 느려진다.
강도는 여러 프레임을 거치면서 변한다.
프레임 속도에 구애받지 않으려면 다음 코드를 사용하면 된다.

 

 

void Update()
{
     light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}

 

그러면 강도는 프레임이 아닌 초를 기준으로 변경된다.

값을 매끄럽게 전화하려는 경우 SmoothDamp 함수를 사용하는 것이 가장 좋을 수 있음.
매끄러운 전환 효과를 원하는 대로 구현할 수 있는 경우에만 Lerp를 사용하자.



참고 문헌 : 유니티 튜토리얼

728x90

'게임엔진 > Unity' 카테고리의 다른 글

Unity - OnMouseDown  (0) 2024.07.02
Unity - GetAxis  (0) 2024.07.02
Unity - Coroutine  (0) 2024.07.01
유니티 게임 프로그래밍 패턴 - SOLID 원칙  (0) 2024.06.19
유니티 - InspectorAttribute  (0) 2024.05.03

+ Recent posts