一、功能介绍
本教程实现一个 FPS 显示脚本,支持 TextMeshProUGUI 组件。脚本会每秒更新一次帧率,并显示在 UI 上,便于开发和调试时观察性能变化。
二、完整代码
将以下代码保存为 FPS.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 包。