벡터 정규화 ( Vector Normalization )
어떤 벡터의 방향만 유지하고 길이는 1로 맞추는 것을 말한다.
방향 벡터 ( Direction Vector ) 를 만드는 과정이다.
벡터 정규화를 사용하는 이유
Unity 같은 게임 엔진에서는 움직임 , 시선 , 충돌 방향 , 빛의 방향 등을 계산할 때 벡터의 방향만 사용하고 싶을 때가 많다.
그런데 일반 벡터에는 거리 ( 크기 ) 정보도 함께 들어있어 정규화해서 거리 영향을 없애고 , 순수한 방향 정보만 추출한다.
정규화를 하지 않으면 target 과 가까울수록 느려지고 , 멀수록 빨라지는 문제가 쉽게 발생한다.
( 방향 벡터의 길이가 거리이기 때문이다 )
정규화를 하면 크기 ( 거리 ) 에 상관없이 항상 길이 1짜리 벡터가 된다.
그래서 속도 같은 다른 값과 곱해서 이동량을 일정하게 제어할 수 있다.
1. 속도 ( 크기 ) 와 방향을 분리
이동 / 힘 계산에서 방향만 필요할 때 , 길이가 1인 방향 벡터 x 속력
거리와 상관없이 일정한 속도로 이동 가능
Vector3 dir = (target.position - transform.position).normalized;
transform.position += dir * moveSpeed * Time.deltaTime;
2. 프레임레이트 / 거리 독립적 움직임
정규화하지 않으면 target과 가까울수록 느려지고 , 멀수록 빨라지는 문제가 생긴다.
정규화 = 항상 길이 1 → speed * deltaTime 이 실제 이동량을 정확히 지배한다.
3. 각도 / 유사도 계산의 정확성
내적 ( dot ) 기반 각도 / 유사도는 단위벡터일 때 해석이 직관적이다
float cos = Vector3.Dot(a.normalized, b.normalized);
float angle = Mathf.Acos(Mathf.Clamp(cos, -1f, 1f)) * Mathf.Rad2Deg;
4. 반사 / 투영 / 슬라이딩 등 기하 연산의 정확성
Vector3.Reflect( incident, normal ) 에서 normal 은 단위벡터여야 반사량이 정확하다.
표면 위 슬라이딩 , 충돌 반사 , 법선 기반 보정 등에서 정규화된 법선이 필수이다.
5. 힘 / 가속도 등 물리량을 일정 스케일로 적용
스티어링 ( steering ) 에서 방향만 정하고 세기 ( 가속도 / 힘 ) 는 스칼라로 제어
Vector3 desiredVel = (target - pos).normalized * maxSpeed;
Vector3 steering = desiredVel - currentVel;
steering = Vector3.ClampMagnitude(steering, maxForce);
rb.AddForce(steering, ForceMode.Acceleration);
'🧊Unity Basic > 벡터 ( Vector )' 카테고리의 다른 글
| 자주 쓰는 예시 코드 (0) | 2025.10.25 |
|---|---|
| Vector3 주요 속성 (0) | 2025.10.25 |