방향 벡터 - 벡터의 정규화(normalized) 유니티

2019. 10. 23. 07:12기타/유니티

더보기

"유니티 방향 벡터"

"유니티 노말라이즈드"

 

오브젝트 균일한 이동을 위하여 벡터의 정규화가 필요합니다.

그 이유는 모든 방향의 벡터 길이가 1 이어야 방향에 따른 이동 속도가 같아지기 때문이지요.

 


magnitude(벡터의 길이를 변환)를 통해 예시를 보겠습니다.

 

VectorDebuger.cs

1
2
3
4
5
6
7
8
9
10
11
public class VectorDebuger : MonoBehaviour {
 
    private void Start() {
        Vector2 upwardDir = new Vector2(0, 1);
        Vector2 diagonalDir = new Vector2(1, 1);
 
        Debug.Log(upwardDir.magnitude);
        Debug.Log(diagonalDir.magnitude);
        Debug.Log(upwardDir.normalized.magnitude);
        Debug.Log(diagonalDir.normalized.magnitude);
    }
}
cs

 

실행한 값입니다.

 

정규화하지 않은 대각선 벡터에서만 1.414214... 의 값이 나옵니다.

만약 정규화하지 않고 이동을 적용했다면 대각선 이동이 1.414... 배 더 빠르게 이동하게 되는 것입니다.

참고로 대각 방향의 벡터는 (0.7071068..., 0.7071068...)로 변환됩니다.

 

또 하나의 예시로 적은 값의 벡터도 길이를 1로 변환해줍니다.

(0.5, 0).normalized => (1, 0) : → 방향

(0.2, 0.2).normalized => (0.7071068, 0.7071068) : ↗ 방향

 

우리는 이렇게 정규화된 벡터를 방향 벡터라고 부릅니다.

 

-보통 'Direction(방향)'을 줄인 'dir'을 붙여 변수명으로 입력합니다.

 


궁금증이 해결되셨나요?

댓글에 피드백은 환영입니당

 

참고 : https://docs.unity3d.com/kr/530/ScriptReference/Vector3-normalized.html

 

Unity - 스크립팅 API: Vector3.normalized

벡터가 정규화(normalized)되면, 벡터는 갖은 방향값을 갖지만, 정규화 벡터의 길이는 1.0입니다. 현재 벡터가 변화하지 않고 새로운 정규화 벡터가 반환된다는 점을 주의하십시오. 현재 벡터를 정규화 하고 싶은 경우에 Normalize 함수를 사용합니다. 해당 벡터가 정규화되기에 너무 작은 경우에 0 벡터가 반환됩니다. 관련 항목: Normalize 함수.

docs.unity3d.com