在游戏开发中,显示帧数(FPS)是一个常见的需求,用于展示游戏的流畅度和性能。以下是几种常见的方式和实现方法,适用于不同平台和游戏引擎:
✅ 一、游戏引擎中的帧数显示(如 Unity、Unreal、Godot 等)
1. Unity
-
方法一:使用
Time.deltaTimefloat frameTime = Time.deltaTime; Debug.Log("FPS: " + 1 / frameTime); -
方法二:使用
Time.unscaledDeltaTime(如果需要固定时间间隔)float frameTime = Time.unscaledDeltaTime; Debug.Log("FPS: " + 1 / frameTime); -
方法三:在 UI 上显示
-
创建一个
TextUI 组件,设置为TextMeshPro或Text。 -
在
Update()中更新文本内容:public Text fpsText; void Update() { fpsText.text = "FPS: " + (1 / Time.deltaTime).ToString("F1"); }
-
2. Unreal Engine
-
方法一:使用
Framerate在 UI 上显示- 在
HUD中添加一个Text或Canvas,设置文本为"FPS: " + (1 / Time.getFramerate())。
- 在
-
方法二:使用
UObject的GetFramerate()int32 FrameRate = Framerate::GetFramerate(); FString Text = FString::Printf(TEXT("FPS: %d"), FrameRate);
3. Godot
-
方法一:使用
Time.get_ticks_msec()var fps_text = Label.new() fps_text.text = "FPS: " + (1 / (Time.get_ticks_msec() - last_tick_time)).to_string() last_tick_time = Time.get_ticks_msec() -
方法二:在 UI 上显示
-
创建一个
Label,在update()中更新文本:var last_tick = 0 func _ready(): last_tick = get_ticks_msec() func _process(delta): var current_tick = get_ticks_msec() var delta_time = (current_tick - last_tick) / 1000.0 fps_text.text = "FPS: " + (1 / delta_time).to_string() last_tick = current_tick
-
✅ 二、自定义帧数显示(适用于自定义引擎)
1. 使用 time 变量
在游戏主循环中记录时间:
start_time = time.time()
while running:
delta_time = time.time() - start_time
fps = 1 / delta_time
print(f"FPS: {fps:.1f}")
start_time = time.time()
2. 在 UI 上显示
- 创建一个
Label或Text,在update()中更新文本内容:def update(self, delta_time): self.text = f"FPS: {1 / delta_time:.1f}"
✅ 三、注意事项
| 项目 | 说明 |
|---|---|
| 精度 | 一般使用 1 / Time.deltaTime,若需更高精度,可使用 Time.unscaledDeltaTime |
| 性能 | 常规帧数显示对性能影响很小,但不要在 Update() 中频繁计算 |
| UI 优化 | 避免在 UI 中频繁刷新,可使用 Text 的 set_text() 方法 |
| 跨平台 | 不同平台的 Time 类可能不同(如 Unity 的 Time.deltaTime 与 Unreal 的 Time.getFramerate()) |
✅ 四、示例代码(Unity C#)
using UnityEngine;
public class FPSDisplay : MonoBehaviour
{
public Text fpsText;
void Update()
{
float frameTime = Time.deltaTime;
fpsText.text = "FPS: " + (1 / frameTime).ToString("F1");
}
}
✅ 五、总结
| 方法 | 适用平台 | 优点 | 缺点 |
|---|---|---|---|
| Unity | Unity | 简单易用 | 需要手动更新文本 |
| Unreal | Unreal | 高效 | 需要使用 Framerate API |
| Godot | Godot | 灵活 | 需要手动计算时间 |
如你有特定的游戏引擎或语言(如 C++、Python、JavaScript 等),可以告诉我,我可以提供更具体的代码示例。