UNITY计算fps时应忽略掉time.timescale的影响
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AnalysisTool : MonoBehaviour
{
public Text fpsText; // 用于显示FPS的UI Text组件
public Text fps2Text; // 用于显示FPS的UI Text组件
public float updateInterval = 1f; // 更新FPS显示的间隔时间(秒)
private float accum = 0; // 累计时间
private int frames = 0; // 累计帧数
private float timeLeft; // 下一次更新FPS显示的时间
private float averageFPS = 0; // 平均FPS
private float minFPS = float.MaxValue; // 最低FPS
private float maxFPS = 0; // 最高FPS
private float deltaTime = 0.0f;
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
void Start()
{
timeLeft = updateInterval;
}
void Update()
{
// 计算当前帧的FPS
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
float currentFPS = 1.0f / deltaTime;
// 累计时间和帧数
timeLeft -= Time.deltaTime;
accum += currentFPS;
frames++;
// 如果达到更新间隔时间,计算平均FPS并更新UI
if (timeLeft <= 0.0f)
{
// 计算平均FPS
averageFPS = accum / frames;
// 更新最低/最高FPS
if (averageFPS < minFPS)
minFPS = averageFPS;
if (averageFPS > maxFPS)
maxFPS = averageFPS;
// 更新UI Text显示FPS信息
fpsText.text = string.Format(
"FPS: {0:0.}\nMin: {1:0.}\nMax: {2:0.}",
averageFPS, minFPS, maxFPS
);
// 重置累计值和时间
timeLeft = updateInterval;
accum = 0;
frames = 0;
}
}
}