트랜스폼 ( Transform )

모든 오브젝트는 반드시 Transform 컴포넌트를 가지고 있고 , 위치 이동은 이 컴포넌트에서 지원하는 기능을 통해 구현된다.
Transform Component 는 GameObject가 좌표계 상에 위치하기 위해서 꼭 필요한 컴포넌트이다.
그렇기 때문에 모든 GameObject가 기본적으로 가지고 있다.
Transform 을 적절히 사용하기 위해선 게임 수학을 알아야 한다. 캐릭터의 이동과 점프 등 게임 수학이 들어있지 않는 게임은 없다.
그 중 게임 수학의 기본인 벡터와 행렬이 Transform 과 아주 밀접하기 때문에 병행하며 공부해야한다.
유니티에서 Transform 은 모든 게임 오브젝트가 반드시 가지고 있는 기본 컴포넌트
그 오브젝트의 위치 , 회전 , 크기의 정보를 담고 있다.
공간에서의 좌표와 방향, 크기를 담당하는 컴포넌트라고 할수 있다.
오브젝트의 위치 ( Position ) , 회전 ( Rotation ) , 크기 ( Scale ) 정보를 담고 있다.
1. 주요 구성 요소
| 속성 | 설명 | 예시 |
| Position | 월드 좌표계 ( World Space ) 기준의 오브젝트 위치 | ( x , y , z ) |
| Rotation | 오브젝트의 회전 상태 ( Quaternion ) 으로 저장 | transform.rotation = Quaternion.Euler( 0 , 90 , 0 ) |
| Scale | 오브젝트의 크기 조정 | transhform.localScale = new Vector3 ( 2 , 1 , 1 ) |
1. Position
- 유니티에서 오브젝트의 위치 정보는 x , y , z 3축으로 구성되어 있다.
- 유니티에서 Vector3 클래스를 통해 간편하게 다룰 수 있으며, 이를 사용해 게임 오브젝트의 위치 이동을 구현할 수 있다.
// Position을 직접적으로 변경하는 방법
Transform.position = new Vector3(x, y, z);
// Translate 함수를 이용한 축(x, y, z) 기준의 위치이동 방법
Transform.Translate(Direction * Speed);
// 선형 보간을 이용해 거리에 따라 빠르게 이동하며 천천히 감속하는 방법
Transform.position = Vector3.Lerp(StartPosition, EndPosition, Interpolation)
// 목표지점을 향해 일정한 속도로 이동하는 방법
Transform.position = Vector3.MoveTowards(transform.position, Target.Position, Speed);
2. Rotation
- 인스펙터의 Transform 컴포넌트에서는 회전값이 포지션과 동일하게 x , y , z 축으로 보여진다.
- 하지만 내부 동작은 4원소를 사용하는 쿼터니언 ( Quaternion )을 통해 이뤄진다.
- 이는 연산속도가 빠르고 3축을 사용했을 때의 짐벌락 ( Gimbal Lock ) 현상을 방지하는 데 효과적이다.
- 쿼터니언은 유니티 입문 시점에서는 이해하기 복잡한 개념이다.
- 이 때문에 보다 직관적인 3축으로 조정할 수 있도록 Quaternion 클래스의 Euler 를 사용한다.
// rotation에 값을 직접 지정해 회전하는 방법
Transform.rotation = Quaternion.Euler(x, y, z);
// Rotate 함수를 이용한 회전
Transform.Rotate(Vector3.up, Speed);
// RotateAround를 이용한 중심축 기준으로 회전
Transform.RotateAround(Target.position, Vector3.up, Speed);
// LookAt을 이용한 대상을 향해 회전시키기
Transform.LookAt(Target.position);
짐벌락 ( Gimbal Lock )

짐벌락은 3D 회전을 사용할 때 발생하는 회전 축 손실 문제이다.
짐벌락에 대한 자세한 내용은 다음 페이지에 정리한다.
▲ 클릭
3. Scale
직관적인 이름 그대로 게임 오브젝트의 크기를 비율로 지정할 수 있는 요소이다.
// Scale 조절
Transform.localScale = new Vector3(x, y, z);
// lossyScale은 부모 오브젝트의 스케일에 상관 없이 자신 고유의 Scale 수치를 반환
Transform.lossyScale
2. 자주 사용하는 Transform 관련 함수
| 함수 | 기능 | 예시 |
| Translate( ) | 지정한 방향으로 이동 | transform.Translate(Vector3.forward * speed * Time.deltaTime) |
| Rotate( ) | 지정한 축으로 회전 | transform.Rotate(Vector3.up * 90 * Time.deltaTime) |
| LookAt( ) | 지정한 대상 방향으로 회전 | transform.LookAt(target) |
| SetParent( ) | 부모 오브젝트 변경 | transform.SetParent(newParent) |
| GetChild( int index ) | 자식 Transform 가져오기 | transform.GetChild(0) |
| Find( string name ) | 이름으로 자식 찾기 | transform.Find("PlayerModel") |
주의 사항
- Transform 은 게임 오브젝트의 물리적인 상태를 직접 변경한다.
└ Rigidbody 가 붙은 오브젝트에서는 물리 이동은 Rigidbody를 통해 해야 한다.
└ ( transform.position 으로 직접 이동 시 물리 충돌이 무시될 수 있다 ) - Quaternion 회전 값은 사람이 읽기 어렵기 때문에 회전 작업 시에는 Euler 각도로 사용하는 것이 좋다.
참고 자료
Transform
https://docs.unity3d.com/kr/2021.3/ScriptReference/Transform.html
Quaternion
https://docs.unity3d.com/kr/2021.3/Manual/class-Quaternion.html
'🧊Unity Basic > 트랜스폼' 카테고리의 다른 글
| Waypoint (0) | 2025.10.19 |
|---|---|
| World Space & Local Space (0) | 2025.10.16 |
| 짐벌락 ( Gimbal Lock ) (0) | 2025.10.16 |