ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 유니티 화면 비율 고정 처리...12
    일지 2021. 10. 10. 00:49

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
         public int Left;
         public int Top;
         public int Right;
         public int Bottom;
    }

    SetResolution의 문제점

    유니티에서 제공하는 SetResolution 함수를 그대로 사용했을 때 문제라고 할 수 있는 부분은 화면을 이동시켰다가 크기를 변경했을 때 그 자리에서 바뀌는 게 아니라 화면 중앙으로 이동하는 부분이 존재한다.

     

    키보드를 주로 컨트롤로 사용하는 게임이라면 문제가 되지 않을 수 있으나 방치형 혹은 자동 사냥이 있는 게임의 경우에는 모니터의 한쪽으로 치워두고 다른 작업을 하는 경우가 대부분이므로 이 방식은 문제가 있을 수 있다.

     

    화면 이동 문제 해결 방법에 대한 고민

    SetResolution의 문제점을 해결하기 위해 또다시 WinAPI의 도움을 받을 필요가 있다.

     

    먼저, 윈도우를 이동시키고 화면의 크기를 바꿔줄 수 있는 함수로 MoveWindow 가 존재한다.

    그런데 MoveWindow 를 통해 크기를 변경하게 되는 경우엔 전달된 윈도우의 크기를 뷰포트의 크기가 아닌 상태창을 포함한 크기로 인식하여 수정하기 때문에 실질적으로 화면의 비율이 깨지게 된다.

     

    따라서 이러한 문제를 막기 위해 크기가 주어질 때 상태창의 크기를 포함해 적절한 크기로 변환해 줄 AdjustWindowRect 함수가 필요하다.

     

    마지막으로 현재 윈도우의 위치를 받아올 GetWindowRect 함수를 포함하면 모든 함수의 준비가 끝난다.

     

    이제 마지막으로 GetWindowRect 에서 사용할 Rect 구조체가 필요한데 이는 다음과 같이 사용하면 된다.

    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
         public int Left;
         public int Top;
         public int Right;
         public int Bottom;
    }

     

    댓글

Designed by Tistory.