유니티/이동

[유니티(Unity)] 좌표이동 - transform.Translate 이동

RꞮbble 2026. 5. 2. 17:53

 

정의 

  • 유니티 물리 엔진(Rigidbody) 없이 현재 위치를 기준으로 변위(방향 * 이동거리)만큼 이동
  • 기본적으로 로컬 좌표계를 기준으로 이동한다. (월드 좌표계로도 설정 가능하다)

 

transform.position VS transform.Translate

  transform.position 이동 transform.Translate 이동
이동 방식  위치 설정 이동 변위 이동
이동 기준 좌표계  월드 좌표 로컬 좌표 (월드 좌표 선택 가능)
연산 방식 좌표를 직접 계산하여 좌표값을 덮어씌워
이동

단 로컬 이동은 쿼터니언 연산을 해야함.
Translate 함수가 자동으로 좌표를 계산하여 이동 
사용처 순간이동, 좌표 고정,  특정 지점까지 이동 

 

cf) 변위 = 처음 위치와 나중 위치 사이 벡터(직선거리 * 방향)

 

ex)

using UnityEngine;

// transform.position 이동
public class Example1 : MonoBehaviour
{
    private void Update()
    {
        transform.position += Vector3.forward * 1.0f * Time.deltaTime;
    }
}

// transform.Translate 이동
public class Example2 : MonoBehaviour
{
    private void Update()
    {
        transform.Translate(Vector3.forward * 1.0f * Time.deltaTime);
    }
}

 

사용 이유

  • 복잡한 연산(Quaternion 연산) 없이 로컬 좌표 이동을 할 수 있기 때문에 
    • transform.Translate는 기본적으로 로컬 좌표 기준 이동이다. 오브젝트의 Rotation이 변하더라도 변한 Rotation을 기준으로 방향이 설정되고 이동한다.

 

언제 사용해야 하는가  

  • 물리적인 충돌이 필요가 없는 단순 플레이어 이동, 지속적인 움직임 
    • 단순 플레이어 이동 = 상하좌우 이동 
    • 지속적인 움직임 = 총알, 화살, 구름, 배경 등 
  • 유니티 물리 엔진(Rigidbody)을 사용하지 않고 일정한 방향으로 이동해야 할 때 
  • 부모 오브젝트의 회전에 맞춰서 이동해야 할 때 

 

사용 방법 

 

함수 정의 

public void Translate(Vector3 translation);
  • translation = 이동 방향(Vector3) + 이동 속도(float)
public void Translate(Vector3 translation, Space relativeTo = Space.Self);
  • translation = 이동 방향(Vector3) * 이동 속도(float)
  • relativeTo = 이동 차원 (월드 좌표 or 로컬 좌표) 
    • Space.Self = 로컬 좌표
    • Space.World = 월드 좌표 

 

ex) 로컬 좌표 기준 z축 방향으로 speed 속도로 이동 

using UnityEngine;

public class Example : MonoBehaviouur
{
    public float speed = 1.0f;
    
    private void Update()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime);
    }
}

 

ex) 월드 좌표 기준 z축 방향으로 speed 속도로 이동

using UnityEngine;

public class Example : MonoBehaviouur
{
    public float speed = 1.0f;
    
    private void Update()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World);
    }
}

 

transform.Translate 이동 장점

  • Quaternion 연산을 Translate 메서드 내부적으로 처리하므로 수학적 실수를 방지할 수 있다. 
  • Translate 메서드 두번째 매개변수로 기준 좌표를 바꿀 수 있어 유연하다. (로컬 좌표 : Space.Self, 월드 좌표 : Space.World)

 

transform.Translate 이동 단점

  • 유니티 물리 엔진(Rigidbody)을 사용하지 않아 물리 현상을 처리할 수 없다. 
  • 물리 현상을 직접 구현해야 한다. 
    • ex) 터널링 현상 = 이동 거리가 벽의 두께보다 커서 오브젝트가 벽을 뚫고 이동하는 현상