유니티에서 오브젝트를 입력없이 이동시키는 방법에는 여러가지가 있으니, 기록해놓고 필요할 때 마다 보고 상황에 맞는 방법을 선택할 생각이다.
MoveTowards : 일정한 속도로 목표지점을 향해 움직인다.
MoveTowards 함수의 매개변수는 각각 “시작 위치, 목표 위치, 속도”을 뜻한다.
// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition;
private float speed = 0.5f;
private float step;
private void Update()
{
step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, targetPosition.transform.position, step);
}
SmoothDamp : 목표 지점을 향해 가다가 목표 지점 근처에서 감속한다.
SmoothDamp 함수의 매개변수는 각각 “현재 위치, 목표 위치, !참조 속도, 목표 도달까지 걸릴 시간”을 뜻한다.
!참조 속도 : 매 호출마다 이 메소드에 의해 변경된 현재속도를 나타낸다.
// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition;
private Vector3 velocity = Vector3.zero;
private void Update()
{
transform.position = Vector3.SmoothDamp(transform.position, targetPosition.transform.position, ref velocity, 0.1f);
}
Lerp : 선형 보간 이동, SmoothDamp보다 감속시간이 길다.
Vector3 Lerp(Vector3 a, Vector3 b, float t)
매개변수 a는 시작 위치 값이고, t = 0일 때 반환된다.
매개변수 b는 목표 위치 값이고, t = 1일 때 반환된다.
매개변수 t는 a와 b사이를 보간될 때 사용되는 값이다. 최솟값은 0, 최댓값은 1이다.
// 스크립트가 부착된 오브젝트의 인스펙터 창에서 target을 끌어다 넣어주는것을 잊어서는 안된다.
[SerializeField] private GameObject targetPosition;
private Vector3 velocity = Vector3.zero;
private void Update()
{
transform.position = Vector3.Lerp(transform.position, targetPosition.transform.position, 0.05f);
}
Slerp : 구면 선형 보간, 호를 그리며 이동한다.
사용법은 Lerp함수의 사용법과 같다.