| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Toy Project
- 독서
- Network Programming
- PS
- Online Judge
- Unity
- git
- Data Structure
- c#
- C++
- System Programming
- BOJ
- multi-thread
- Today
- Total
I'm FanJae.
[20260521] Unity 정리 ( Transform 이동 처리 기초 - Translate, Input, deltaTime ) 본문
[20260521] Unity 정리 ( Transform 이동 처리 기초 - Translate, Input, deltaTime )
FanJae 2026. 5. 21. 23:541. Translate()
(1) 정의
- Translate()는 현재 오브젝트의 위치를 이동시키는 메서드다.
- 현재 위치를 기준으로 지정한 방향과 거리만큼 이동한다.
transform.Translate(이동값);
transform.Translate(이동값, 기준공간);
2. 이동과 프레임 보정
(1) Time.deltaTime
- 게임은 매 프레임마다 코드가 실행된다.
- 예를 들어 아래 코드가 있다고 가정한다.
transform.position += new Vector3(1, 0, 0);
- FPS가 30이면, 1초 동안 약 30번 실행, FPS가 60이면 1초 동안 약 60번 실행으로, FPS가 높을수록 빠르게 움직이는 문제가 발생한다. 이를 해결하기 위해 Time.deltaTime을 사용한다.
(2) 역할
- 이전 프레임부터 현재 프레임까지 걸린 시간을 계산한다.
- 프레임 속도에 영향을 받지 않도록 이동량을 보정한다.
3. 입력 처리
(1) Input Manager
- 입력 축(Input Axis)을 관리하는 설정이다.

- Unity의 입력 방식은 Input Manager와 새로운 방식인 Input System으로 나뉜다. Input System은 입력 액션(Input Action)을 따로 정의해서 키보드, 마우스, 게임패드 입력을 더 체계적으로 관리할 수 있다.
- 예제에서는 기존 Input Manager 방식을 사용했다. 프로젝트에서 어떤 입력 방식을 사용할 것인가 대해서는 Project Settings 에 있는 Active Input Handling을 통해 변경이 가능하다.
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
(2) Input.GetAxis / Input.GetAxisRaw
Input.GetAxis()
- 입력을 부드럽게 보간
- 천천히 변화
Input.GetAxisRaw()
- 즉시 입력
- 보정 없음
- 일반적으로 1, 0, 1
4. 이동 벡터 만들기
- 입력 값을 이용해 이동 방향을 만든다.
Vector3 move = new Vector3(horizontal,0,vertical);
(1) 대각선 이동 문제
- 일반적으로, 대각선 쪽의 이동이 더 빠른데 이는 방향 벡터 관점에서 생각하면 이렇다.
- 예를들어 오른쪽 이동과 윗쪽 이동을 동시에 했다고 가정하자.

- 그러면, 이렇게 이동하게 된다. 이때 방향 벡터의 크기가 1.414배가 된다.
- 각각 직선으로 1칸 씩 이동했기 때문에, 빗변은 피타고라스의 정리에 의해 $\sqrt(2)$가 된다.
- 따라서 이러한 대각선 이동에 대한 보정을 해 준다.
move = move.normalized;
normalized → 방향은 유지하고 길이를 1로 보정한다.
5. 기준 공간 (Space)
- Translate는 기준 공간을 지정할 수 있다.
transform.Translate(move,Space.Self);
1) Space.Self
- 현재 오브젝트 기준 이동
transform.Translate(move, Space.World); // → 내가 바라보는 방향
2) Space.World
- 월드 좌표 기준 이동
transform.Translate(move, Space.World); // → 고정된 세계 좌표
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 move = new Vector3(horizontal, 0, vertical);
move = move.normalized;
transform.Translate(move * moveSpeed * Time.deltaTime);
// 이와 같은 형태로 이동을 구현할 수 있다.
6. 정리
- 이번 내용은 Unity에서 입력값을 받아서 오브젝트를 이동시키는 기본 흐름이다.
- Input.GetAxisRaw()로 입력값을 받고, 그 값을 이용해 Vector3 이동 방향을 만든다. 이때 대각선의 입력은 벡터의 길이가 1보다 커져 이동 속도가 빨라질 수 있으므로, normalized로 보정해야 한다.
- 이후, Time.deltaTime을 곱해 FPS 차이에 따른 이동 속도 차이를 줄이고, Translate()를 사용해 실제 오브젝트를 이동시킬 수 있다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260522] Unity 정리 ( Unity 물리 엔진 기초 - Rigidbody ) (0) | 2026.05.22 |
|---|---|
| [20260521] Unity 정리 ( Unity 회전 처리 기초 - Euler, Quaternion, LookAt, RotateAround ) (0) | 2026.05.22 |
| [20260520] Unity ( Unity의 LifeCycle ) (0) | 2026.05.20 |
| [20260520] Unity ( transform과 gameObject ) (0) | 2026.05.20 |
| [20260520] Unity ( 기본 GameObject와 Component ) (0) | 2026.05.20 |