Unity creates FPS monitoring

Effect

This article provides two FPS presentation methods,
the white GUI display in the upper left corner
and our TextMeshPro display.
Because the version used in this program is the 2021 version, TextMeshPro is used.
The script below will use both the TextMeshpro version of the 2021 version and the Text version of other UGUI. versions
insert image description here

The red part of the FPS is presented

The first script TextMeshPro

Create a FPS script make the following script

using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 打印FPS
/// </summary>
public class FPS : MonoBehaviour
{
    
    
    float _updateInterval = 1f;//设定更新帧率的时间间隔为1秒  
    float _accum = .0f;//累积时间  
    int _frames = 0;//在_updateInterval时间内运行了多少帧  
    float _timeLeft;
    string fpsFormat;
    public TextMeshProUGUI text;

    void Start()
    {
    
    
        _timeLeft = _updateInterval;
    }
    void Update()
    {
    
    
        _timeLeft -= Time.deltaTime;
        //Time.timeScale可以控制Update 和LateUpdate 的执行速度,  
        //Time.deltaTime是以秒计算,完成最后一帧的时间  
        //相除即可得到相应的一帧所用的时间  
        _accum += Time.timeScale / Time.deltaTime;
        ++_frames;//帧数  

        if (_timeLeft <= 0)
        {
    
    
            float fps = _accum / _frames;
            //Debug.Log(_accum + "__" + _frames);  
            fpsFormat = System.String.Format("{0:F2}FPS", fps);//保留两位小数  
                                                               // Debug.LogError(fpsFormat);

            _timeLeft = _updateInterval;
            _accum = .0f;
            _frames = 0;
        }
        text.text = fpsFormat;
    }
}

Then you can actively assign the Text that needs to be displayed in Unity
insert image description here

The second Text

The following is the text version below the 2021 version

using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 打印FPS
/// </summary>
public class FPS : MonoBehaviour
{
    
    
    float _updateInterval = 1f;//设定更新帧率的时间间隔为1秒  
    float _accum = .0f;//累积时间  
    int _frames = 0;//在_updateInterval时间内运行了多少帧  
    float _timeLeft;
    string fpsFormat;
    public Text text;

    void Start()
    {
    
    
        _timeLeft = _updateInterval;
    }
    void Update()
    {
    
    
        _timeLeft -= Time.deltaTime;
        //Time.timeScale可以控制Update 和LateUpdate 的执行速度,  
        //Time.deltaTime是以秒计算,完成最后一帧的时间  
        //相除即可得到相应的一帧所用的时间  
        _accum += Time.timeScale / Time.deltaTime;
        ++_frames;//帧数  

        if (_timeLeft <= 0)
        {
    
    
            float fps = _accum / _frames;
            //Debug.Log(_accum + "__" + _frames);  
            fpsFormat = System.String.Format("{0:F2}FPS", fps);//保留两位小数  
                                                               // Debug.LogError(fpsFormat);

            _timeLeft = _updateInterval;
            _accum = .0f;
            _frames = 0;
        }
        text.text = fpsFormat;
    }
}

White FPS version

The difference from other versions is that the script can be used directly without assignment, and the difference is just one more OnGUi method.
The point is that the script can be used regardless of the version.

using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 打印FPS
/// </summary>
public class FPS : MonoBehaviour
{
    
    
    float _updateInterval = 1f;//设定更新帧率的时间间隔为1秒  
    float _accum = .0f;//累积时间  
    int _frames = 0;//在_updateInterval时间内运行了多少帧  
    float _timeLeft;
    string fpsFormat;

    void Start()
    {
    
    
        _timeLeft = _updateInterval;
    }

    void OnGUI()
    {
    
    
        GUI.Label(new Rect(100, 100, 200, 200), fpsFormat);
    }

    void Update()
    {
    
    
        _timeLeft -= Time.deltaTime;
        //Time.timeScale可以控制Update 和LateUpdate 的执行速度,  
        //Time.deltaTime是以秒计算,完成最后一帧的时间  
        //相除即可得到相应的一帧所用的时间  
        _accum += Time.timeScale / Time.deltaTime;
        ++_frames;//帧数  

        if (_timeLeft <= 0)
        {
    
    
            float fps = _accum / _frames;
            //Debug.Log(_accum + "__" + _frames);  
            fpsFormat = System.String.Format("{0:F2}FPS", fps);//保留两位小数  
                                                               // Debug.LogError(fpsFormat);

            _timeLeft = _updateInterval;
            _accum = .0f;
            _frames = 0;
        }
    }
}

Guess you like

Origin blog.csdn.net/weixin_42746271/article/details/123916748