유니티/이동

[유니티(Unity)] 좌표이동 - Vector3.MoveTowards 이동

RꞮbble 2026. 5. 5. 21:25


정의

  • 현재 지점(current)에서 목표 지점(target)까지 최대 이동 거리(maxDistanceDelta)만큼 직선으로 등속이동 
    • 최대 이동 거리 = 매 프레임 이동하는 거리 

 

Vector3.MoveTowards 이동 VS transform.Translate 이동 

  Vector3.MoveTowards 이동 transform.Translate 이동
이동 방식 목표 지점까지 등속이동 변위(방향 * 이동거리)이동
필요한 정보 현재 위치, 목표 위치, 최대 이동 거리 이동방향 * 속도, (기준 좌표계)
도착 판정 목표 지점에 도달하면 정지 목표 지점이 없음. 
멈추는 로직이 있지 않으면 무한 전진 

 

사용 이유

  • 오브젝트를 직선으로 등속이동시키기 위해서 
  • 목표지점에 정확하게 도착하도록 하기 위해서 

 

언제 사용해야 하는가

  • 등속 직선 운동이 필요할 때
    • 같은 속도로 움직이는 오브젝트(발판, 구름, UI, 클릭한 위치로 캐릭터 이동 등)

 

사용 방법

 
함수 정의

public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);
  • current = 시작 지점 위치 (Vector3)
  • target = 도착 지점 위치 (Vector3)
  • maxDistanceDelta = 이번 프레임에 이동할 거리

 
ex) 

using UnityEngine;

public class Example : MonoBehaviour
{
    public Transform endPos;

    public float speed = 1.5f;

    private void Update()
    {
        transform.position = Vector3.MoveTowards(transform.position, endPos.position, speed * Time.deltaTime);
    }
}

 

 

 

Vector3.MoveTowards 이동 장점

  • 목표지점 도달시 오브젝트가 떨리는 현상이 없다. (목표지점까지 정확하게 이동하기 때문)
  • 목적지 도달 여부를 판별하기 위한 코드가 필요없다. 
    • 이로 인해 연산 비용이 낮다. 
    • transform.Translate, Vector3.Lerp, Vector3.Slerp으로 이동을 구현하면 목적지 도달 판별 코드가 필요함. 

 

Vector3.MoveTowards 이동 단점

  • 등속도로 이동하기 떄문에 단조로운 느낌을 준다. 
  • 시작점(current) 좌표계와 도착점(target) 좌표계를 섞어서 쓰면(시작점은 월드 좌표계, 도착점을 로컬 좌표계) 오브젝트가 이상한 곳으로 이동한다.
    -> 좌표계를 통일시켜야 한다. 
  • 오직 목표 지점으로 이동만 고려하기 때문에 주변에 무엇(벽, 낭떠러지)이 있더라도 목표를 향해 전진만 한다.