개발/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
반응형