Unity

Lerp(선형 보간)

gcreators 2024. 10. 1. 17:43

우리는 이렇게 시작 지점과 끝 지점을 알면

그 중간의 지점들을 대략적으로 알 수 있습니다.

 

정확하게 알기 위해서는

 

70%의 위치를 알려면 최대치에서 0.7을 곱하면 되고

 

50%의 위치를 알려면 최대치에서 0.5를 곱하면 됩니다(혹은 나누기 2)

 

그런데

이런 경우라면 중간 위치를 어떻게 알 수 있을까요?

((27-3)*0.5)+3

이런 계산식을 통해 우리는 중간의 위치를 알 수 있습니다.

 

이렇게

양 끝의 위치를 알고 있을때 그 사이의 원하는 위치를 알아내는 것을 Lerp(선형 보간)

이라고 합니다

이렇게 두개의 object를 준비해준뒤 스크립트를 최상위 부모에 컴포넌트 합니다.

using UnityEngine;

public class LerpExample1 : MonoBehaviour
{
    [SerializeField][Range(0f, 1f)]
    private float ratio = 0f;

    private Transform originTr = null;
    private Transform targetTr = null;

    Vector3 startPos;
    Vector3 endPos;

    private void Awake()
    {
        Transform[] trs = GetComponentsInChildren<Transform>(); 
        //GetComponentsInChildren : 해당 컴포넌트를 가진 오브젝트를 모두 가져옴,
        //제일 처음(0)에 들어오는 것은 최상위 부모이며 그 아래 자식순으로 들어오게 됨

        originTr = trs[1];
        targetTr = trs[2];
    }

    private void Start()
    {
        startPos = originTr.position;//시작&추격 object의 위치를 startPos 에
        endPos = targetTr.position;//타겟 object의 위치를 endPos 에
    }

    private void Update()
    {
        //Lerp : Linear Interpolation
        float lerp = Mathf.Lerp(0f, 1f, 0.7f); //Lerp(시작지점, 끝지점, 구하기 원하는 지점)

        Vector3 lerpPos = Vector3.Lerp(startPos, endPos, ratio);
        originTr.position = lerpPos; //원하는 지점까지 추격 object를 이동
    }
}

이제 ratio 수치에 따라 originTr이 원하는 위치로 이동하는 것을 확인 할 수 있습니다