ABOUT ME

-

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

    댓글

Designed by Tistory.