일지
유니티 화면 비율 고정 처리...2
niamdank
2021. 9. 17. 21:17
특정 비율 고정 처리 구현
유니티의 Update 에서 화면 비율이 바뀐 것을 확인하여 변경 처리하도록 구현한다.
ResolutionController.cs
using System;
using UnityEngine;
public class ResolutionController : MonoBehaviour
{
public float AspectX { get; set; } = 16;
public float AspectY { get; set; } = 9;
private float m_aspectRatio;
private int m_screenSizeX;
private int m_screenSizeY;
void Start()
{
m_aspectRatio = AspectX / AspectY;
m_screenSizeX = Screen.width;
m_screenSizeY = Screen.height;
}
void Update()
{
int newScreenSizeX = Screen.width;
int newScreenSizeY = Screen.height;
if (newScreenSizeX == m_screenSizeX && newScreenSizeY == m_screenSizeY)
{
return;
}
if (Input.GetKey(KeyCode.Mouse0))
{
return;
}
if (newScreenSizeX != m_screenSizeX && newScreenSizeY != m_screenSizeY)
{
if (Math.Abs(newScreenSizeX - m_screenSizeX) > Math.Abs(newScreenSizeY - m_screenSizeY))
{
newScreenSizeY = Mathf.FloorToInt(newScreenSizeX / m_aspectRatio);
}
else
{
newScreenSizeX = Mathf.FloorToInt(newScreenSizeY * m_aspectRatio);
}
}
else if (newScreenSizeX != m_screenSizeX)
{
newScreenSizeY = Mathf.FloorToInt(newScreenSizeX / m_aspectRatio);
}
else if (newScreenSizeY != m_screenSizeY)
{
newScreenSizeX = Mathf.FloorToInt(newScreenSizeY * m_aspectRatio);
}
m_screenSizeX = (int)newScreenSizeX;
m_screenSizeY = (int)newScreenSizeY;
Screen.SetResolution(m_screenSizeX, m_screenSizeY, false);
}
}
위와 같이 화면 정렬 중 튀는 문제가 발생했다.
이를 해결하기 위해 우선 처리를 IEnumerator 로 분리하고 플래그로 중간에 더 바뀌지 않도록 막을 필요가 있어 보인다.