[Unity] 모바일 프레임 세팅 RnD

WestCoast·2023년 1월 8일
1

Unity

목록 보기
5/5

간단한 모바일 에셋 제작하면서 모바일로 테스트하는데 프레임이 떨어져서 조사해본 내용.
겸사겸사 나중에 프레임 테스트용으로 쓰려고 포스팅해둠.

정리


아래 내용의 테스트 기종은 Samsung Z flip3 입니다.

  • 모바일에서는 프레임 디폴트 값이 30fps 로 나옴

  • Application.targetFrameRate 프로퍼티로 조절 가능

  • Application.targetFrameRate 세팅 안하고 그냥 찍어보면 PC에서는 '-1'로 나옴

  • Project Settings 에 기본 프레임 세팅하는 곳이 있나 찾아봤지만 없었음

  • Project Settings - Quality Setting 이 있음. Level에 따라 세팅값들을 바꿀 수 있음 (그런데 왜 프레임 세팅은 없냐고...)

  • 테스트 해본 결과 120fps 까지도 모바일에서 세팅 가능(폰에 따라 다를지도?)

  • 하지만 모바일에서 30, 60, 120 등과 같이 특정 값이 아닌 70, 80 이런 값으로는 세팅 안됨. (이는 모바일에서는 vSync가 항상 On 되어있기 때문)


FPS & ms 체크 및 프레임 세팅 코드


아래 코드는 대략적인 FPS 를 표시하는 용도. 매우 정확한 FPS 를 표시해주지는 않음. (정확한 FPS 를 체크하고 싶다면 Precise frame rates in Unity 참조)
_fpsUpdateTimer 는 실제 기능과 상관없지만 세팅 안해두면 Update 마다 텍스트가 바뀌는 탓에 눈이 피곤해서 추가함

using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    [SerializeField] TMP_Dropdown _dropdown = null;
    [SerializeField] TMP_Text _fpsText = null;

    List<string> _dropDownOptionList = new();

    float _fpsUpdateTimer = 0f;

    void Start()
    {
        _dropDownOptionList.Add(Application.targetFrameRate.ToString());
        _dropDownOptionList.Add("30");
        _dropDownOptionList.Add("60");
        _dropDownOptionList.Add("80");
        _dropDownOptionList.Add("120");
        _dropDownOptionList.Add("144");

        _dropdown.AddOptions(_dropDownOptionList);

        _dropdown.onValueChanged.AddListener(ChangeFPS);
    }

    void Update()
    {
        float fps = 1.0f / Time.deltaTime;
        float ms = Time.deltaTime * 1000.0f;

        _fpsUpdateTimer += Time.deltaTime;

        if (_fpsUpdateTimer >= 0.1f)
        {
            _fpsUpdateTimer = 0f;
            _fpsText.text = $"{(int)fps} FPS ({ms:.0}ms)";
        }
    }

    private void ChangeFPS(int idx)
    {
        int fps = int.Parse(_dropDownOptionList[idx]);
        Application.targetFrameRate = fps;
    }
}
profile
게임... 만들지 않겠는가..

0개의 댓글