유니티 : 목표 지점으로 이동시키기

2022. 1. 10. 17:33개발/유니티

오늘은 네 가지의 함수에 대해서 배울 것이다. 이것은 Vector3에서 전부 지원하는 함수이다.

 

Vector3.MoveTowards(현재 위치, 목표 위치, 속도)

target 위치로 등속 이동하는 함수

public class Move : MonoBehaviour
{

    Vector3 target = new Vector3(-16.52f, 2.25f, 0);
    
    void Update()
    {
        transform.position =
            Vector3.MoveTowards(transform.position, target, 1f);
    }
}

Vector3.SmoothDamp(현재 위치, 목표 위치, 참조 속도, 속도)

public class Move : MonoBehaviour
{

    Vector3 target = new Vector3(-16.52f, 2.25f, 0);
    
    void Update()
    {

        Vector3 velo = Vector3.zero;
        transform.position =
            Vector3.SmoothDamp(transform.position
            , target, ref velo, 1f);

    }
}

일정한 속도가 아닌 부드럽게 이동한다.

MoveTowards함수와는 달리 매개변수로 받는 속도가 작을 수록 빨라진다. (반비례 관계)

세 번째 매개 변수는 나중에 알아보고, 일단 zero로 두고 진행을 하자. (zero가 아니라면 위치가 바뀐다.)

ref는 참조 접근이라는 키워드이며, 실시간으로 바뀌는 값을 적용할 수 있게 된다.

Vector3.Lerp(현재 위치, 목표 위치, 속도)

public class Move : MonoBehaviour
{

    Vector3 target = new Vector3(-16.52f, 2.25f, 0);
    
    void Update()
    {

        transform.position =
            Vector3.Lerp(transform.position,
            target, 1f);

    }
}

SmoothDamp와 유사한 동작을 한다. 차이점은 매개변수의 개수와 속도에 대한 매개변수에 있다. 

속도는 최댓값이 1이며, 작을 수록 느리고 클 수록 빠른 정비례 관계이다.

Lerp 함수같은 이동을 선형보간 이동이라고도 한다.

Vector3.Slerp(현재 위치, 목표 위치, 속도)

public class Move : MonoBehaviour
{

    Vector3 target = new Vector3(-16.52f, 2.25f, 0);
    
    void Update()
    {

        transform.position =
            Vector3.Slerp(transform.position,
            target, 0.05f);

    }
}

Lerp 함수와의 차이점은 Slerp는 구면보간 이동 (포물선 이동)을 한다는 점이다. 그냥 직진이 아니라 점프해서 간다고 생각해도 될 것 같다.

반응형