[Unity] Transform에 대해 알아보자

권태형·2023년 9월 8일
0

Unity

목록 보기
2/9
post-thumbnail

Transform이란?

Transform은 Unity 에디터에서 오브젝트를 생성할때 모든 게임 오브젝트에 기본적으로 부여되는 컴포넌트이다.

  • ✨여기서 말하는 게임 오브젝트는 대부분의 Hierarchy창의 대부분의 오브젝트를 지칭하지만, UI와 같은 Canvas와 그 하위구조에 있는 요소는 가르키지 않는다. 이러한 UI오브젝트들은 Transform이 아닌 Rect Transform이라는 다른 컴포넌트를 기본으로 갖는다.

이 Transfomr컴포넌트는 해당 오브젝트의 위치(Position), 회전(Rotation), 크기(Scale) 등의 변환 정보를 담고있다.

모든 게임오브젝트가 이 컴포넌트를 가지고 있기 때문에 이미 Unity에서 내장되어 따로 GetComponet<>()와 같은 메소드르 사용해서 불러올 필요없이 스크립트에서 바로 transform 을 사용해도 해당 게임 오브젝트의 Transform컴포넌트를 가르키게 된다.

주요 속성

일반적으로 transform에서 주로 사용되는 속성과 내용에 대해 정리해보자


transform.position

transform.rotation

transform.lossyScale

transform.eulerAngles

transform.forward

transform.up

transform.right
  1. transform.position

    현재 오브젝트의 위치정보를 담고있다. 타입은 Vector3 타입이며 x, y, z축의 값을 float타입으로 받고있다.

  2. transform.rotation

    현재 오브젝트의 회전정보를 담고있다. Quaternion타입을 가지며 x, y, z, w 축의 값을 float타입으로 받는다.

  3. transform.lossyScale

    현재 오브젝트의 부피정보를 담고있다. Vector3 타입으로 x, y, z축의 값을 float타입으로 받는다.

  4. transform.eulerAngles

    현재 오브젝트의 회전정보를 Vector3타입으로 x, y, z축값을 가지고 float타입으로 받는다.

  5. transform.forward

    현재 오브젝트의 전방 방향을 나타내는 Vector3값으로 주로 해당 오브젝트가 어느 방향을 향하게 할지 정할 때 사용된다.
    후방 방향의 경우 -1을 곱해주는 방식으로 사용된다.

  6. tranform.up

    현재 오브젝트의 위쪽 방향을 나타내는 Vector3값으로 주로 오브젝트의 상단 방향을 정의하는데 사용된다.
    아래 방향의 경우 -1을 곱해주는 방식으로 사용된다.

  7. tranform.right

    현재 오브젝트의 오른쪽 방향을 나타내는 Vector3값으로 주로 오브젝트의 우측 방향을 정의하는데 사용된다.
    왼쪽 방향의 경우 -1을곱해주는 방식으로 사용된다.

주요 메소드

transform.LookAt(Transform target)

transform.Rotate(Vector3 eulerAngles)

transform.Translate(Vector3 translation)
  1. LookAt(Transform target)

    해당 오브젝트를 주어진 타겟을 향하도록 게임 오브젝트를 회전시킨다.

  2. Rotate(Vector3 eulerAngles)

    주어진 오일러 각도만큼 게임 오브젝트를 회전시킨다.

  3. Translate(Vector3 translation)

    주어진 벡터만큼 게임 오브젝트를 이동시킨다.

특수 상황

tranform은 모든 게임오브젝트에 항상 부여되기 때문에, 일반적으로 gameObject에서 접근하는 메소드들 또한 이 tranform을 이용해 접근할 수 있다.

RaycastHit2D[] hits = Physics2D.BoxCastAll(transform.position, new Vector2(5, 5), 0.0f, Vector2.right, 0.0f, layerMask);

int cnt = 0;

for (int i = 0; i < hits.Length; i++) {
    if (hits[i].transform.GetComponent<Monster>()) {

        target = hits[i].transform;

        break;

    } else {
        cnt++;

    }         
}

위의 코드는 BoxCastAll을 통해 RaycastHit2D타입을 가진 구조체에 접근하게 되는데, 이는 hits[i]에 담겨 있다.

하지만, hits[i]에 직접적으로 .GetComponent<>()와 같은 gameObject에서 사용되는 메소드를 사용하려면 오류가 발생한다. 이때 tranform을 이용해서 그 구조체에 접근해서 .GetComponent<>()를 사용하면 일반적인 gameObject에 접근한 것처럼 사용할 수 있다.

gameObject에 대한 상속을 Transform이 받았을 것이라 생각한다면 가능할 수도 있지만, 이 Transform은 gameObject클래스 내의 속성중 하나로 제공될 뿐, 딱히 상속을 받지 않는데서 이러한 특수한 상황이 Unity엔진에서 의도적으로 쉽게 gameObject에 접근할 수 있도록 편의를 생각하여 설계했다고 생각할 수 있다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글