240221-TIL

2024. 2. 21. 21:26내일배움캠프

2월 21일

 

개인 프로젝트를 또또 진행중이다.

 

개인 프로젝트에서 플레이어의 위치를 카메라가 졸졸졸 따라다니게 만들고 싶고

 

그러면서도 부드럽고 자연스러운 카메라 무빙을 고민하던 와중에 

 

Lerp에 대한 세션이 진행되었다. 

 

그러니까? 오늘은 Lerp에 대해서 정리해 보도록 하자

 

Lerp

더보기

Lerp 선형 보간이라고 한다 두 값의 사이를 선형적으로 보간하는 함수인데

 

내가 시작하려는 지점, 도착할 지점, 그리고 비율을 입력받아 선형적으로 중간 값을 계산한다.

 

Unity에선 다양한 형태의 Lerp 함수를 제공한다. 많이 사용되는 것은

 

Mathf, Vector3, Quaternion,Color 등이 있다

// Math
public static float Lerp(float a, float b, float t);

// Vector
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);

// Quaternion
public static Quaternion Lerp(Quaternion a, Quaternion b, float t);

// Color.Learp
public static Color Lerp(Color a, Color b, float t);

 

항상 a는 시작지점, b는 목표지점, t는 보간 비율이라고 생각하면 된다.

 

이제 카메라 이동에 관련해서 나는 Vector의 Lerp를 사용할 계획이고

 

이동 관련 예시 코드이다.

 

using UnityEngine;

public class ObjectMovement : MonoBehaviour
{
    public Transform targetPosition; // 이동할 목표 위치
    public float moveSpeed = 2f; // 이동 속도

    void Update()
    {
        // 현재 위치에서 목표 위치로 선형 보간하여 이동
        transform.position = Vector3.Lerp(transform.position, targetPosition.position, moveSpeed * Time.deltaTime);
    }
}

 

목표 위치를 내 위치로 설정하고 targetPostion을 설정해준다 그리고 내 위치에서 TargetPosition

 

까지의 보간 비율을 입력해 주면 되는데 여기서 잘 봐야할것은 현재 위치가 계속해서 변하는 코드란 것이다.

 

Learp는 시작 지점에서 목표 지점까지 내가 정해준 T의 비율만큼 움직이게 되고

 

그게 반복되면서 목표 지점까지 도달한다.

 

위의 코드는 10의 시작지점에서 100의 도착지점까지 출발하였지만 

 

첫 비율만큼 움직이고 다음 비율을 계산하려고 하면? 이미 첫 비율만큼 움직인 위치에서 목표지점까지의 비율이기 때문에

 

목적지에 도착할수록? 천천히 움직이게 된다. 즉 등속으로 움직여야 하는 물체에는 적합하지 않은 방식이란 것이다.

 

using UnityEngine;

public class ObjectMovement : MonoBehaviour
{
	public Transform startPosition;
    public Transform targetPosition; // 이동할 목표 위치
    public float moveSpeed = 2f; // 이동 속도

    void Update()
    {
        // 현재 위치에서 목표 위치로 선형 보간하여 이동
        transform.position = Vector3.Lerp(startPosition, targetPosition.position, moveSpeed * Time.deltaTime);
    }
}

 

그렇다면? 등속으로 움직여야 한다면 위의 코드처럼 시작 지점을 고정해주어 계속 똑같은 만큼 움직이도록 해줘야

 

등속으로 움직이는 물체를 만들수 있다.

 

두개의 차이점을 잘 고려해서 내가 어떠한 움직임을 원하는지 잘 파악하고 사용하도록 하자.

 

또한 에시코드 1번 문제의 문제점이 하나 있는데 그건 바로 

 

Start와 End 거리의 % 비율만큼 이동한다 라고 할 경우 변화하는 내 위치에서의 % 비율이기 때문에

 

내가 움직여야 하는 물체가 목표지점에 한없이 가까워 지는 상태가 되어 버린다는 것이다.

 

그렇기에 예제코드 1번으로 어떠한 물체의 이동을 구현했고 그 물체가 Target 지점으로 도착했는지 안했는지

 

알기 위해서 == 비교는 옳지 않은 방법이다.

오늘은 Lerp에 대해서 간단한 학습과 예제코드 1번 2번의 비교를 통해

 

각각의 방식으로 구현했을때 어떠한 문제점이 있고 어떠한 연출이 이루어지는지에 대해서 알아보았다.

 

내가 원하는 방식에 따라 꼭 예제 코드가 아니더라도 다양한 활용 방법이 있으니

 

각 방법에 따른 주의점과 달라지는 연출을 잘 생각하면서 구현해보도록 하자

 

2월 21일 TIL은 여기서 마치도록 하겠다.

'내일배움캠프' 카테고리의 다른 글

240226-TIL  (0) 2024.02.26
240223-TIL  (0) 2024.02.23
240220-TIL  (0) 2024.02.20
240219-TIL  (0) 2024.02.19
240216-TIL  (0) 2024.02.16