1. Transform 컴포넌트의 이해
- Transform은 유니티 씬 안에 존재하는 모든 게임 오브젝트의 위치, 회전, 크기 정보를 담당합니다.
- Transform은 모든 게임 오브젝트가 좌표계 상에 위치하기 위해 반드시 필요한 컴포넌트입니다. 유니티는 더 빠른 처리를 위해 내부적으로 오브젝트의 위치, 회전, 크기를 **4x4 행렬(Matrix)**로 연산합니다
주요 특징
- 기본 컴포넌트: 모든 게임 오브젝트는 생성 시 자동으로 Transform 컴포넌트를 가집니다.
- 계층 구조(Hierarchy): 부모-자식 관계를 형성하며, 자식 오브젝트는 부모 Transform의 이동과 회전 등 변화에 직접적인 영향을 받습니다.
Transform 속성 정리
| 속성 | 설명 |
| position |
월드 좌표(World Position) 기준 위치
|
| localPosition |
부모 Transform 기준 상대적 위치
|
| rotation |
월드 좌표 기준 회전 (Quaternion)
|
| localRotation |
부모 Transform 기준 회전
|
| localScale |
부모 Transform 기준 크기 비율
|
| parent |
부모 Transform 참조 (수정 시 부모 변경 가능)
|
| childCount |
현재 연결된 자식 오브젝트의 수
|
2. 위치, 회전, 크기 제어 (Transform Functions)
Vector3 (위치와 크기)
유니티에서 위치와 크기는 Vector3 클래스를 사용합니다.
- 정의: 크기와 방향을 모두 가지는 개념으로, 단순한 점이 아니라 두 점 사이의 변화량 혹은 이동량을 의미하기도 합니다.
- 구조: 3D 공간의 [x, y, z] 3축으로 정의됩니다.
| 이름 | 좌표 값 (x,y,z) | 설명 |
| Vector3.zero | (0, 0, 0) | 원점 |
| Vector3.one | (1, 1, 1) | 모든 축 1 |
| Vector3.up / down | (0, 1, 0) / (0, -1, 0) | 위 / 아래 |
| Vector3.forward / back | (0, 0, 1) / (0, 0, -1) | 앞 / 뒤 |
Position (위치 이동)
| 구현 방식 | 코드 예시 | 특징 |
| 직접 변경 | transform.position = new Vector3(x, y, z); |
좌표값을 즉시 할당
|
| 상대 이동 | transform.Translate(Direction * Speed); |
현재 위치 기준 축 방향 이동
|
| 선형 보간 | Vector3.Lerp(Start, End, Interpolation) |
거리에 따라 빠르게 이동 후 천천히 감속
|
| 일정 속도 | Vector3.MoveTowards(Current, Target, Speed) |
목표를 향해 일정한 속도로 이동
|
Quaternion (회전)
인스펙터에서는 회전값이 [x, y, z] 각도로 표시되지만, 내부적으로 유니티는 **4원소(Quaternion)**를 사용합니다.


- 사용 이유: 오일러 각도(x, y, z축 기반) 회전 시 발생하는 짐벌락(Gimbal Lock) 현상(두 회전축이 겹쳐 회전 자유도를 상실하는 문제)을 방지하기 위함입니다.
- 특징: 회전 전체를 하나의 회전 벡터로 표시하여 계산 속도가 빠르고 안정적입니다
주요 함수:
- Quaternion.Euler(x, y, z): 직관적인 3축 각도로 회전값 지정
- transform.Rotate(axis, speed): 특정 축 기준 회전
- transform.LookAt(target): 대상을 즉시 바라보게 설정
Scale (크기)
- transform.localScale: 부모와의 비율에 따른 상대적 크기 조절
- transform.lossyScale: 부모의 스케일과 상관없는 오브젝트 고유의 월드 스케일 수치(읽기 전용)
3. 프레임(Frame)과 델타타임(Time.deltaTime)
PC 사양에 따라 초당 출력되는 **FPS(Frames Per Second)**가 다릅니다. 만약 프레임마다 동일한 수치를 더해 이동시킨다면, 고사양 PC에서 캐릭터가 훨씬 빠르게 움직이는 문제가 발생합니다.
이를 해결하기 위해 **1프레임 갱신에 소요된 시간인 Time.deltaTime**을 이동값에 곱해주어야 합니다. 이를 통해 어떤 환경에서든 동일한 이동 속도를 보장할 수 있습니다.
Time.deltaTime의 중요성
- 프레임(Frame): 화면의 한 컷
- FPS: 초당 프레임 수
- Delta Time: 한 프레임 갱신에 소요된 시간($\frac{1}{FPS}$)
- 이동 로직에 Time.deltaTime을 곱해줘야 컴퓨터 성능(프레임 수)에 상관없이 일정한 속도로 움직입니다
4. 사용자 입력 처리 (Input Class)
사용자의 키 입력을 인식하여 캐릭터를 움직이는 가장 기초적인 방법입니다.
① GetKey 함수 (단일 키 입력)
- Input.GetKey(): 키를 누르는 동안 계속 true 반환
- Input.GetKeyDown(): 키를 누르는 순간 1회만 true
- Input.GetKeyUp(): 키에서 손을 떼는 순간 1회만 false(반환값 주의)
② 축 입력 (Axis Control)
유니티 Input Manager에 설정된 가상 축을 이용하는 방식입니다.
- Input.GetAxis(): -1.0 ~ 1.0 사이의 float 반환. 부드러운 가속/감속이 필요한 조이스틱이나 차량 이동에 적합합니다.
- Input.GetAxisRaw(): -1, 0, 1 중 하나를 즉시 반환. 반응 속도가 중요한 키보드 기반 캐릭터 이동에 적합합니다.
💡 오늘의 정리
- Transform은 오브젝트의 물리적 기본 데이터(위치/회전/크기)를 관리한다.
- 회전 계산에는 Quaternion을 사용하여 짐벌락을 방지한다.
- 이동 구현 시 기기별 성능 차이를 극복하기 위해 반드시 Time.deltaTime을 활용하자.
'유니티 > UnityEngine3D 입문 및 스크립팅 기초' 카테고리의 다른 글
| 코루틴 (0) | 2026.01.02 |
|---|---|
| 물리, 충돌 (0) | 2026.01.02 |
| 오브젝트, 프리팹, 생성과 파괴 (0) | 2026.01.01 |
| 유니티 개요 (0) | 2026.01.01 |