Posts Frame Rate Checker
Post
Cancel

Frame Rate Checker

Note


  • 실제 FPS 값을 실시간, 최근 N개의 평균, 최소, 최댓값으로 확인할 수 있다.
  • 게임 진행 동안 텍스트의 위치, 색상, 크기, GUI 표시 상태를 실시간으로 변경할 수 있다.

Preview


Download


Source Code


.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 날짜 : 2021-01-24 PM 4:11:02
// 작성자 : Rito

namespace Rito
{
    public class FrameRateChecker : MonoBehaviour
    {
        [Range(0, 2000)]
        public float _posX = 30f;
        [Range(0, 1000)]
        public float _posY = 30f;

        public Color _textColor = Color.yellow;
        [Range(16, 80)]
        public int _textSize = 40;
        [Range(5, 500)]
        public int _frameCheckLength = 100;
        public bool _showGUI = true;

        private float[] _arrFPS;
        private int _counter = 0;

        private float _curFPS; // 실시간 프레임률
        private float _avgFPS; // 최근 _frameCheckLength 개수만큼의 프레임률 평균
        private float _maxFPS; // 최근 _frameCheckLength 개수만큼의 프레임률 최댓값
        private float _minFPS; // 최근 _frameCheckLength 개수만큼의 프레임률 최솟값

        private void OnEnable()
        {
            Debug.Log("Frame Rate Checker Running");
            _arrFPS = new float[_frameCheckLength];
            _maxFPS = -9999f;
            _minFPS = 9999f;
            _curFPS = 0f;
            _counter = 0;
        }

        private void Update()
        {
            // Trace Array Length
            if (_arrFPS.Length != _frameCheckLength) _arrFPS = new float[_frameCheckLength];
            if (_counter >= _frameCheckLength) _counter = 0;

            // Set FPS
            _curFPS = 1 / Time.deltaTime;
            _arrFPS[_counter] = _curFPS;

            float sum = 0;
            _maxFPS = -9999;
            _minFPS = 9999;
            foreach (var fps in _arrFPS)
            {
                // Min Max
                if (fps > _maxFPS) _maxFPS = fps;
                if (fps < _minFPS) _minFPS = fps;

                // Average
                sum += fps;
            }
            _avgFPS = sum / _arrFPS.Length;

            // Add Counter
            _counter++;
        }

        private void OnGUI()
        {
            if (!_showGUI) return;

            GUIStyle labelStyle = GUI.skin.label;
            labelStyle.normal.textColor = _textColor;
            labelStyle.fontSize = _textSize;

            GUILayout.BeginArea(new Rect(_posX, _posY, 1000, 500));
            GUILayout.Label($"Current : {_curFPS, 9: 000.00}", labelStyle);
            GUILayout.Label($"Average : {_avgFPS, 8: 000.00}", labelStyle);
            GUILayout.Label($"Max : {_maxFPS, 15: 000.00}", labelStyle);
            GUILayout.Label($"Min : {_minFPS, 16: 000.00}", labelStyle);
            GUILayout.EndArea();
        }
    }
}
This post is licensed under CC BY 4.0 by the author.