-
유니티 화면 비율 고정 처리...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; }