반응형

Unity에서 “바라보는 방향으로 이동” 하기
“객체가 바라보는 방향으로, 일정한 속도로 이동시키는 원리와 공식”
[개념 1] 객체가 바라보는 방향을 구하려면?
👉 rotation * Vector3.forward 사용
Vector3 forwardDir = transform.rotation * Vector3.forward;
- transform.rotation: 현재 회전값 (Quaternion)
- Vector3.forward: 월드 기준 Z+ 방향
- 둘을 곱하면 → 현재 회전 상태에서의 ‘앞 방향’
📌 추가 예시: 특정 각도 기준 회전 방향 만들기
Vector3 dir = Quaternion.Euler(0, angle, 0) * Vector3.forward;
| angle | 결과 방향 벡터 | 의미 |
| 0 | (0, 0, 1) | 정면 (Z+) |
| 90 | (1, 0, 0) | 오른쪽 (X+) |
| 45 | (0.707, 0, 0.707) | 오른앞 대각선 |
이처럼 회전값을 직접 만들어 곱해도 같은 원리로 회전된 방향을 구할 수 있음
[개념 2] 전방 방향으로 실제 이동시키려면?
👉 전방 방향 벡터에 속도를 곱해 위치에 더하기
transform.position += forwardDir * speed * Time.deltaTime;
- forwardDir: 앞 방향 벡터
- speed: 초당 이동 거리
- Time.deltaTime: 프레임 보정
- 결과: 실제로 이동
[개념 3] 왜 곱해야 하나?
👉 객체가 회전했을 때 forward 방향이 달라지기 때문
| Y | 회전값 회전 * Vector3.forward 결과 | 의미 |
| 0 | (0, 0, 1) | 정면 (Z+) |
| 90 | (1, 0, 0) | 오른쪽 (X+) |
| 180 | (0, 0, -1) | 뒤쪽 (Z−) |
| 270 | (−1, 0, 0) | 왼쪽 (X−) |
→ 회전이 바뀌면 forward도 달라짐 → 곱해서 구해야 정확
[개념 4] 정규화된 방향과 속도를 곱해 "속도 벡터" 만들기
🔹 4-1. 방향 구하기
Vector3 dir = Quaternion.Euler(0, angle, 0) * Vector3.forward;
- 구한 것: 이동 방향
- 예시 (angle = 45도): dir ≈ (0.707, 0, 0.707)
→ 오른앞 대각선 방향
🔹 4-2. 방향 정규화
Vector3 normalizedDir = dir.normalized;
- 구한 것: 크기 1짜리 단위 방향 벡터
- 예시:normalizedDir ≈ (0.707, 0, 0.707)
→ 이미 단위 벡터이므로 변화 없음
🔹 4-3. 속도 벡터 만들기
Vector3 velocity = normalizedDir * speed;
- 구한 것: 속도 벡터 (방향 + 속도 포함)
- 예시 (speed = 5): velocity ≈ (3.535, 0, 3.535)
→ 초당 5m 속도로 이동할 방향성 포함 벡터
🔹 4-4. 위치 갱신
transform.position += velocity * Time.deltaTime;
- 구한 것: 이번 프레임에서 이동할 거리
- 예시 (deltaTime = 0.016): (3.535, 0, 3.535) * 0.016 ≈ (0.05656, 0, 0.05656)
→ 이번 프레임에서 약 5.6cm 이동
요약표
단계 계산식 구하는 것 예시 결과
| ① 방향 | Quaternion.Euler(0, angle, 0) * Vector3.forward | 이동 방향 | (0.707, 0, 0.707) |
| ② 정규화 | dir.normalized | 단위 방향 벡터 | (0.707, 0, 0.707) |
| ③ 속도 벡터 | normalizedDir * speed | 방향 + 속도 | (3.535, 0, 3.535) |
| ④ 이동 거리 | velocity * Time.deltaTime | 이번 프레임 이동 거리 | (0.056, 0, 0.056) |
반응형
