-
유니티 화면 비율 고정 처리...2일지 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 로 분리하고 플래그로 중간에 더 바뀌지 않도록 막을 필요가 있어 보인다.