본문 바로가기
게임개발/Unity

[Unity] ViewportToWorldPoint 함수와 뷰포트 좌표계 이해하기

by 거북이 코딩 2025. 2. 22.

들어가며

 Unity를 공부하면서 ViewportToWorldPoint 함수를 사용해 봤습니다. 뷰포트 좌표가 담긴 Vector3을 매개변수로 받아서 월드 좌표로 변환해 주는 함수입니다. 그림으로 예를 들면 아래와 같이 뷰포트 좌표가 좌하단이 (0,0) 우상단이 (1,1)이라고 했을 때 이를 월드좌표로 변환해 주는 것입니다.

 

 뷰포트의 (x, y) 좌표가 월드좌표로 계산되는 것은 알겠는데 z좌표는 어떻게 계산되느냐..? 이것이 궁금해서 찾아봤는데 블로그에서는 찾기 힘들어서 직접 해보기도 하고 문서도 찾아봤습니다. 결론부터 말하자면 z좌표는 카메라(뷰포트)의 z좌표를 0으로 봤을 때 멀리 있는 만큼의 거리 즉, 오브젝트와 카메라와의 거리를 인자로 전달하면 오브젝트의 z값을 반환해 줍니다. 이때 거리는 월드좌표와 같은 비율로 계산합니다. 예를 들어 카메라의 z 월드좌표가 -10이고, 오브젝트의 z 월드좌표가 0이라면 거리는 10이 되므로 인자로 거리인 10을 전달해야 오브젝트의 월드좌표인 0이 반환되는 것입니다.

 

적용 및 실습

 저는 유니티에서 카메라에 경계에 맞춰서 기즈모를 그리기 위해 이 함수를 사용해 봤습니다. 

void OnDrawGizmos()
    {
        Gizmos.color = Color.red;

        // 카메라로부터 10 앞에 있는 거리에 뷰포트 크기의 빨간색 사각형을 그림.
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 10)), Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 10)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 10)), Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 10)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 10)), Camera.main.ViewportToWorldPoint(new Vector3(1, 0, 10)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(1, 0, 10)), Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 10)));

        Gizmos.color = Color.blue;
        // 카메라로부터 20 앞에 있는 거리에 뷰포트 크기의 파란색 사각형을 그림.
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 20)), Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 20)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(0, 1, 20)), Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 20)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(1, 1, 20)), Camera.main.ViewportToWorldPoint(new Vector3(1, 0, 20)));
        Gizmos.DrawLine(Camera.main.ViewportToWorldPoint(new Vector3(1, 0, 20)), Camera.main.ViewportToWorldPoint(new Vector3(0, 0, 20)));
    }

 

 (x, y) 좌표는 뷰포트의 크기에 맞추기 위해서 (0,0), (1,1)을 활용하였고, z좌표는 뷰포트에서 떨어진 거리를 입력해 봤습니다. 결과는 아래와 같습니다.

 

마치며

 오늘은 Camera.ViewportToWorldPoint 함수의 매개변수는 무엇을 의미하고 어떤값이 반환되는지 조금 자세히 알아봤습니다. 뷰포트좌표의 z좌표는 어떠한 기준으로 변환되는지 이해하는데 도움이 되었을거라 생각합니다. 감사합니다.

참고자료

https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Camera.ViewportToWorldPoint.html

 

Unity - Scripting API: Camera.ViewportToWorldPoint

Viewport space is normalized and relative to the camera. The bottom-left of the viewport is (0,0); the top-right is (1,1). The z position is in world units from the camera. Note that ViewportToWorldPoint transforms an x-y screen position into a x-y-z posit

docs.unity3d.com

 

'게임개발 > Unity' 카테고리의 다른 글

[Unity] Kimchi-Run 만들면서 Unity6 배우기  (0) 2025.01.23