Game/Unity

[유니티] 오브젝트 이동 (1)

nowkoes 2023. 1. 19. 14:36

목표

- 오브젝트가 특정 경로를 따라 이동하게 구현

- 좌표와 애니메이션을 이용해 오브젝트가 움직이며 이동하게 구현


오브젝트 이동

 오브젝트가 특정 경로를 따라 이동하는 것을 구현하기 전에, 유니티에 존재하는 이동 방법들에 대해 먼저 알아보자. 우리가 어떤 오브젝트를 생성했을 때 그 오브젝트의 인스펙터창을 보게 되면 다음과 같은 Transform 컴포넌트가 항상 존재한다.

 

빈 게임오브젝트의 컴포넌트 창

 

 이 Transform 컴포넌트는, 유니티 공식 사이트에 따르면 Scene 속 각 Object의 Position(위치), Rotation(회전), Scale(크기)를 결정한다고 쓰여 있다. 쉽게 말해 좌표에 관한 정보를 담고 있다고 생각하면 되겠다. 따라서 이러한 위치를 프레임마다 변경한다면 우리는 마치 이 오브젝트가 이동하는 것처럼 보일 것이다. 이러한 개념에서 착안하여 다음 두 가지 방법을 알아보자.

 

- transform.Translate 

 유니티 공식 문서에 따르면 transform의 프로퍼티 중 Translate라는 속성이 존재한다.

 

 

출처:https://docs.unity3d.com/ScriptReference/Transform.Translate.html

 

 사용하는 방법은 다양하지만, 결국에는 물체를 특정 방향 혹은 위치로 이동시킨다는 것이다. 예를 들어 아래에 나와있는 물체를 x축으로 +3만큼 이동시키고 싶다면 다음과 같이 코드를 작성하면 된다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    void Start()
    {
        this.transform.Translate(new Vector3(3, 0, 0));
    }
}

 이러한 코드 외에도 공식 문서에 나와있는 것처럼 다양한 방법으로 translate를 활용할 수 있다.

 

- transform.position

 이또한 유니티 공식 문서에 다음과 같이 정의되어 있다.

 

출처:https://docs.unity3d.com/ScriptReference/Transform-position.html

 

 Transform의 월드 스페이스 위치를 직접적으로 변경하여 이동한다는 정도로 해석할 수 있는데, 주어진 좌표로만 이동하기 때문에 방향이 따로 고려되지 않는다는 특징이 있다. 위의 예시처럼 (0,0,0)을 기준으로 (3,0,0)으로 이동시키고 싶다면 다음과 같이 작성하면 된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{
    void Start()
    {
        this.transform.position += new Vector3(3, 0, 0);
    }
}

 

- transform.Translate vs transform.position

 그렇다면 두 이동 방법의 차이점은 무엇일까? 

 

이동을 position으로 작성한 sphere와 translate로 작성한 cube. 축의 방향을 살짝 돌려놨다.

 

 지금 보시는 것과 같이 사각형 큐브는 x, z축이 시계방향으로 회전해있다. 그리고 원형 큐브는 반시계방향으로 회전해있다. 이상태에서 사각형에는 transform.position(new Vector3(3,0,0)) 을 이용해 x축으로 3만큼 이동하게 하고, 구에는 transform.Translate(new Vector3(3,0,0)) 을 이용해 x축으로 3만큼 이동하게 하면 어떻게 될까?

 

코드 실행 결과

 

 구는 월드에서 제시하는 축과 전혀 다른 방향으로 움직였지만, 사각형은 월드에서 제시한 x축을 따라 움직였다. 여기서 두 이동에 관한 차이점을 확인 할 수 있다. Translate를 이용한 이동은 자신의 축을 기준으로 하는, 즉 로컬 좌표를 기준으로 동작하므로 월드에서 가리키는 x축이 아닌 자신의 x축을 따라 이동하였다. 하지만 position을 이용한 이동은 자신의 방향이 어찌되었든 월드에서 제시한 방향을 따라 이동하였다. 이를 통해 두 이동의 차이는 월드 좌표를 기준으로 동작하느냐, 로컬 좌표를 기준으로 동작하느냐에 있다.


요약

- 유니티에서 이동하는 방법은 크게 2가지, transform.Translate와 transform.position을 이용한 방법이 존재한다.
- transform.Translate는 로컬 좌표를 기준으로 동작하고, transform.position은 글로벌 좌표를 기준으로 동작한다.

 

반응형