24.01.19 TIL - Unity : nomalized, 벡터의 정규화

JJwoo·2024년 1월 18일

1) 문제점

강의를 들으며 게임 제작을 하던 중에, 플레이어 객체가 상하좌우 단일 이동은 문제가 없으나 대각선 이동을 할 때 스피드가 평소보다 빠른 문제가 발생했다.

2) 원인


오랜만에 보는 피타고라스 (그림판)

가령 스피드가 1이라고 치면, x나 y축으로 이동 할 때의 스피드는 1이지만, 둘을 함께 입력하여 대각선 이동을 할 때는 루트2의 속도(1.414)로 나아가게 된 것.

3) 해결

VectorN.normalized

활용 예시)

    public void OnMove(InputValue value)
    {
        //Debug.Log("OnMove" + value.ToString());
        Vector2 moveInput = value.Get<Vector2>().normalized;
        CallMoveEvent(moveInput);
    }

이동 입력이 감지될 때 호출되는 OnMove 메서드가 있다.

두번 째 줄을 살펴보면, 메소드가 Vector2 객체로 입력 데이터를 검색하고 있으며 Vector2는 2차원 벡터와 점을 나타낸다.

그 다음에는 normalized 속성을 설정해준다.

이는 동일한 방향을 가지지만 크기(magnitude)가 1인 벡터를 반환한다.

입력을 정규화함으로써, 모든 방향에서의 이동 속도가 일관되게 유지시킬 수 있다.

이를 벡터의 정규화라고 한다.

다만 2D 게임에서는 Z축을 사용하지 않기 때문에 Z축을 0으로 만들어주어야 벡터의 정규화를 할 때 오류가 발생하지 않는다.

profile
개발 모코코

0개의 댓글