h = Input.GetAxis("Horizontal");
v = Input.GetAxis("Vertical");
transform.Translate(new Vector3(h, v, 0) * (moveSpeed * Time.deltaTime))
transform.Translate(new Vector3(h, v, 0) * (moveSpeed * Time.deltaTime))
Translate()는 괄호안의 벡터만큼 오브젝트의 Transform을 이동시키는 함수이다.

기본적으로
transform.Translate(Vector, Space.Self)와 같이 Space.Self가 생략되어 있으며, 이는 로컬을 기준으로 움직인다는 뜻이다.
Space.World를 넣을 경우 월드 기준으로 움직인다.
월드 기준으로 움직일 경우transform.position += Vector와 동일한 동작을 한다.
transform.Translate(new Vector3(5f, 5f, 5f), Space.Self)
로컬 기준으로 이동해 5, -5, 5로 이동했다.
transform.Translate(new Vector3(5f, 5f, 5f), Space.World)
월드 기준으로 이동해 5, 5, 5로 이동했다.
transform.position += new Vector3(5f, 5f, 5f)
월드 기준으로 이동해 5, 5, 5로 이동했다.
transform.position = Vector3.MoveTowards(transform.position, new Vector3(10f, 0, 0), 2f)

첫번째 인자로는 시작위치,
두번째 인자로는 도착위치,
세번째 인자로는 매 호출마다 움직일 거리를 받는다.
위치를 직접 정하므로 당연히 월드 기준.

1프레임에 X가 월드기준 2만큼 이동한걸 확인할 수 있다.
도착위치에 도착하면 더 이상 이동하지 않지만 호출은 계속 된다. 다른곳으로 강제로 이동시키더라도 다시 도착위치를 향해 움직인다.
재밌는 점으로는 세번째 인자로 받아오는 거리인데, 말그대로 정말 거리만큼 이동하므로

10f는 위와 같은 움직임을 볼 수 있다.
new Vector3(9f, 12f, 0), 5f 의 경우

인자로 많은걸 받아오는데


Vector3 velocity = Vector3.zero;
void Update()
{
Vector3.SmoothDamp(transform.position, new Vector3(10, 10, 10), ref velocity, 3f)
}
특이한 점으로는 현재 속도의 역할을 하는 velocity라는 벡터를 따로 만들어 줘야 한다. 이 벡터는 공식 문서에 의하면 매 호출마다 값이 수정된다고 한다. 이 값이 수정되는 기준은 아마 나머지 파라미터를 통한 계산일 것이다. velocity를 Update함수 안에서 선언하면 매 호출마다 출발 속도가 되어버리는 재앙이 일어난다. 반드시 밖에서 선언하고 시작하자.
참고로 smoothTime의 경우 말그대로 "대략적인 시간"이다.
이는 실제로는 3f 보다 더 오래 걸린다는 뜻이며 도착위치에 얼추 도착하는 시간이다.

실제로 위 코드대로 실행했으나 3f 동안 고작 5.95씩 밖에 못갔다.

좀더 간단하게 100 0 0으로 10f 동안 얼마나 가나 봤더니 이정도.
이번엔 velocity를 Vector3 velocity = Vector3.right로 바꾸고 해본 결과 역시 시작속도가 유의미한 영향을 끼친다.

SmoothDamp는 목표 위치에 가까워 질수록 느려진다.
Vector3.Lerp(transform.position, new Vector3(100f, 0, 0), 0.01f)

Lerp는 목표 지점에 선형 보간으로 이동하며
시작위치, 도착위치, 보간값을 받는다.
보간값은 0~1까지 값으로 0이면 시작위치에서 움직이지 않고, 1이면 호출 즉시 도착위치에 바로 도착한다.
a+(b-a)*t 라는 값을 반환한다고 한다.
Vector3.Slerp(transform.position, new Vector3(10f, 1.5f, 0), 0.01f)
Slerp는 구면 선형 보간이다.

특이한 점으로는 두 벡터의 방향을 원점 (0,0,0)을 기준으로 부드럽게 보간하며, 두 벡터의 크기(원점에서의 거리)도 같이 보간한다는 점이다.
그래서 원점을 기준으로 두 벡터의 방향이 다를 경우, 원점을 중심으로 하는 구면 상의 호처럼 움직이는 결과를 낼 수 있다.
벡터의 방향이 같다면 Lerp처럼 작동한다.