Unity 实现帧率(FPS)显示功能

一、功能介绍


本教程实现一个 FPS 显示脚本,支持 TextMeshProUGUI 组件。脚本会每秒更新一次帧率,并显示在 UI 上,便于开发和调试时观察性能变化。

二、完整代码


将以下代码保存为 FPS.cs 脚本:

cs 复制代码
using UnityEngine;
using TMPro;

[RequireComponent(typeof(TextMeshProUGUI))]
public class FPS : MonoBehaviour
{
    private TextMeshProUGUI labelText;
    private float deltaTime = 0.0f;

    private void Awake()
    {
        labelText = GetComponent<TextMeshProUGUI>();
    }

    private void Start()
    {
        InvokeRepeating("UpdateFPS", 1.0f, 1.0f);
    }

    private void Update()
    {
        deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
    }

    private void UpdateFPS()
    {
        float fps = 1.0f / deltaTime;
        labelText.text = "帧率: " + Mathf.Ceil(fps).ToString();
    }
}

三、使用步骤


1. 导入 TextMeshPro 包

在 Unity 编辑器中,确保已导入 TextMeshPro(一般新项目自带)。

2. 创建 UI 文本对象

  • 在场景中创建一个 Canvas(画布)。
  • 在 Canvas 下创建一个 TextMeshPro - Text 对象(GameObject -> UI -> Text - TextMeshPro)。

3. 挂载脚本

  • 将上面的 FPS.cs 脚本拖到 TextMeshPro 组件所在的 GameObject 上。

4. 运行游戏

点击播放,UI 上会实时显示当前帧率。

四、效果展示


运行后,UI 上会每秒刷新一次,显示类似如下内容:

帧率: 60

五、原理说明


  • deltaTime 计算:通过 Time.unscaledDeltaTime 获取每帧的真实耗时,平滑处理后用于计算 FPS。
  • InvokeRepeating:每秒调用一次 UpdateFPS,减少 UI 刷新频率,避免性能浪费。
  • TextMeshProUGUI:高质量文本渲染,适合现代 UI 需求。

六、常见问题


  • 未显示帧率:请确认脚本已挂载到 TextMeshProUGUI 组件所在的对象上。
  • 报错找不到 TextMeshProUGUI:请确保已导入 TextMeshPro 包。