Unity3D/유니티 공부

[Unity / C#] 유니티 오브젝트 이동(2) - Transform.position

상연 2022. 5. 4. 03:44

목차

    [유니티 오브젝트 이동 시리즈 모음]

     

    이전 글에서 왜 오브젝트에 Transform이 항상 존재하는지, 그리고 왜 Transform의 값을 변경해서 이동을 구현하는지에 대해 알아보고 그러한 이동 방법 중 하나인 Translate에 대해 알아봤다.

    이번에는 Translate와 양대산맥을 이루는 대표적인 Transform을 이용한 이동방법 중 하나인 Position에 대해 보자.

     

    Position


    사실 Position은 이동 방법 중 하나라기 보다는, Transform을 구성하는 요소 중 하나이다.

    다만, Translate를 사용한 이동에서는 메소드를 사용하여 간접적으로 Position의 변경을 꾀했다면

    이번에는 요소의 값을 직접적으로 건드려서 Position을 변경하여 이동시키는 것이다.

     

    따라서 크게 설명할 것이 없다.

    Translate의 경우에야 뭐 ToRelative 인자 값에 따라 이동의 양상이 달라지는 면이 있었지만

    Position은 완전히 월드좌표 이동이다. 그렇기 때문에 방향 또한 고려되지 않는다.

    단순히 주어진 좌표로만 이동한다고 생각하면 된다.

     

    공식 문서를 살펴보자.

    The world space position of the Transform.
    The position property of a GameObject’s Transform, which is accessible in the Unity Editor and through scripts. Alter this value to move a GameObject. Get this value to locate the GameObject in 3D world space.

    Transform의 월드 좌표에서의 Position이다.

    오브젝트의 Transfrom의 좌표 속성이고 유니티 에디터 및 스크립트로 접근 가능하다.

    GameObject를 이동하려면 이 값을 변경한다.

    3D 세계 공간에서 GameObject의 위치를 알고 싶으면 이 값을 가져옵니다.

     

    우리는 굵게 표시한 두 줄에 집중해야 한다.

    Position을 변경함으로써 이동하지만, Position은 월드 좌표를 나타낸다. 즉, 월드 좌표의 이동이다.

    void Start()
        {
            transform.position += new Vector3(3, 0, 0);
        }

    위와 같은 코드를 실행해보겠다. Position을 변경해야 하므로 Position에 Vector 데이터 타입 간의 연산을 실시해주면 Position이 변경된다.

    실행하기 전의 상태에 대해 설명하자면

    Capsule 오브젝트는 우측 사진과 같은 Transform 값을 갖고 있다.

    다만, Rotation의 값이 있기 때문에 월드 좌표와는 다소 차이를 갖고 있다.

    이 상태에서 x축의 값을 3만큼 증가시키면 어떻게 될까?

     

    정직하게 오브젝트의 방향은 일절 고려하지 않고 월드 좌표에서 X값이 3만큼 증가함을 볼 수 있다.

    작성한 코드의 동작원리에 대해 조금 더 자세히 이야기하고 Position에 대해 마치겠다.

    1.  Position을 변경할 오브젝트의 월드 좌표를 갖고 온다.
    2.  1에서 가져온 월드 좌표에 이동시킬 Vector 값을 더해준다.
    3.  오브젝트에 2에서 변경된 Vector값으로 Position을 저장한다.
    4.  Position이 변경되었으므로 오브젝트는 '이동'했다.