일지

유니티 화면 비율 고정 처리...25

niamdank 2021. 12. 22. 15:12

최대화 처리

최대화 처리를 위해 작업표시줄 등을 제외한 창의 순수한 크기를 구해준다.

		// 윈도우 창 border 사이즈
		RECT windowRect = new RECT();
		RECT clientRect = new RECT();

		GetWindowRect(m_hwnd, out windowRect);
		GetClientRect(m_hwnd, out clientRect);

		int windowBorderSizeX = (windowRect.Right - windowRect.Left) - (clientRect.Right - clientRect.Left);
		int windowBorderSizeY = (windowRect.Bottom - windowRect.Top) - (clientRect.Bottom - clientRect.Top);

		// 작업 표시줄 사이즈
		RECT taskBarRect = new RECT();

		IntPtr hTaskbar = FindWindow("Shell_TrayWnd", null);
		GetWindowRect(hTaskbar, out taskBarRect);

		int taskBarSizeX = Mathf.Abs(taskBarRect.Right - taskBarRect.Left);
		int taskBarSizeY = Mathf.Abs(taskBarRect.Bottom - taskBarRect.Top);

		// 작업 표시줄 위치 아래(위)인 경우
		if (taskBarSizeX > taskBarSizeY)
		{
			taskBarSizeX = 0;
		}
		// 작업 표시줄 위치가 왼쪽(오른쪽)인 경우
		else
		{
			taskBarSizeY = 0;
		}

		// 최대화 시 창 크기
		m_maximizedSizeX = Display.main.systemWidth - windowBorderSizeX - taskBarSizeX;
		m_maximizedSizeY = Display.main.systemHeight - windowBorderSizeY - taskBarSizeY;

 

이후 Update에서 최대화가 된 경우를 감지하여 최대화 처리를 진행한다.

이때, 최대화 이후 버그를 막기 위해 Margin 값을 주어 창화면이 유지되도록 한다.

	private bool Maximized
	{ 
		get
		{
			return Screen.width >= m_maximizedSizeX || Screen.height >= m_maximizedSizeY;
		}
	}
        
		if (!m_maximized && Maximized)
		{
			m_maximized = true;

			StopAllCoroutines();
			m_updateState = UpdateState.Waiting;

			int width = m_maximizedSizeX;
			int height = m_maximizedSizeY - MaximizeMargin;
			GetAdjustedSize(ref width, ref height, ResizeOption.Horizontal);

			Screen.SetResolution(width, height, false);

			m_screenSizeX = width;
			m_screenSizeY = height;
		}

		if (!Maximized)
		{
			m_maximized = false;
		}

 

전체화면 테스트

 

이제 마지막으로 윈도우의 Areo 기능으로 화면 가장자리로 이동해서 크기가 달라졌을 때 처리만 추가하면 크기 조정 처리를 마무리할 수 있을 것 같다.

 

2022-09-05 추가)

최근 이 부분 조회수가 늘어서 추가하자면 현재 진행된 코드는 깃에 올라가 있다.

관심 갖고 있는 분야가 좀 달라져서 진행을 안 하고 있어서 정확히 어디까지 했었는지 기억은 안 나지만 없는 것보다는 도움이 될 것이다.

 

NadanKim/UnityCustomTools: 유니티에서 사용할 수 있는 툴의 개발 및 저장을 위한 저장소 (github.com)

 

GitHub - NadanKim/UnityCustomTools: 유니티에서 사용할 수 있는 툴의 개발 및 저장을 위한 저장소

유니티에서 사용할 수 있는 툴의 개발 및 저장을 위한 저장소. Contribute to NadanKim/UnityCustomTools development by creating an account on GitHub.

github.com

 

추가로 내가 참고한 코드는 다음과 같다.

DenchiSoft/UnityAspectRatioController: Unity script to enforce window aspect ratio for standalone Windows 32/64bit builds. (github.com)

 

GitHub - DenchiSoft/UnityAspectRatioController: Unity script to enforce window aspect ratio for standalone Windows 32/64bit buil

Unity script to enforce window aspect ratio for standalone Windows 32/64bit builds. - GitHub - DenchiSoft/UnityAspectRatioController: Unity script to enforce window aspect ratio for standalone Wind...

github.com