개발/Unity

[Unity] Mathf.Lerp() 함수, 특정 구간 안의 값으로 변환하고 싶을 때

쪼르뚜 2023. 10. 19. 20:10
728x90
반응형

선형 보간법?

먼저 선형 보간법에 대해 알아야합니다.

선형 보간법(Linear Interpolation)은 주어진 두 개의 점 사이의 값을 추정하거나 보간하는 방법 중 하나입니다.

 

점을 A B라고 가정하면, 점의 좌표를 (x₁, y₁) (x₂, y₂) 나타낼 있습니다. 그리고 x₁ < x₂라고 가정합니다.

이때, 주어진 x₁ < x < x₂ 범위 내의 어떤 x 값에 대해, 해당 x 대한 y 값을 선형 보간법을 사용하여 구할 있습니다.

수식은 다음과 같습니다.

 

y = y₁ + (x - x₁) * (y₂ - y₁) / (x₂ - x₁)


Mathf.Lerp(a,b,c)

 

a : 시작 값

b : 끝 값

c : a와 b 사이의 보간 값, 0에서 1 사이의 범위로 고정됩니다.

 

아까 수식을 이용하면 c에 어떤 값을 넣으면 되는지 알 수 있습니다.

0과 1의 사이의 범위로 고정되므로 y₁ = 0, y₂ = 1 입니다.

 

y = 0 + (x - x₁) * (1 - 0) / (x₂ - x₁)

 

수식을 간단하게 표현하면?

y = (x - x₁) / (x₂ - x₁)


 

이제 실제 코드에 적용해보자

 

상점에서 아이템을 구매할 경우

  • 슬라이더로 아이템 개수 조절
  • 구매할 아이템 개수와 금액 나타내기
public class JellyItem : MonoBehaviour {
    [SerializeField] private TextMeshProUGUI countTxt;
    [SerializeField] private TextMeshProUGUI priceTxt;
    [SerializeField] private Slider slider;

    private readonly int JELLY_PRICE = 60;

    private void Awake() {
        slider.onValueChanged.AddListener(GetTotalPrice);
    }

    private void GetTotalPrice(float value) {
        var count = (int) Mathf.Lerp(0, 100, value);
        countTxt.text = count.ToString();
        priceTxt.text = (count * JELLY_PRICE).ToString();
    }
}


참고한 자료

https://docs.unity3d.com/kr/530/ScriptReference/Mathf.Lerp.html

with ChatGPT

728x90
반응형