Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/FPSDisplay.cs
2026-03-04 10:03:45 +08:00

63 lines
1.2 KiB
C#

using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Text))]
public class FPSDisplay : MonoBehaviour
{
public float updateInterval = 0.5f;
public bool showMedian;
public float medianLearnrate = 0.05f;
private float accum;
private int frames;
private float timeleft;
private float currentFPS;
private float median;
private float average;
private Text uguiText;
public float CurrentFPS => currentFPS;
public float FPSMedian => median;
public float FPSAverage => average;
private void Start()
{
uguiText = GetComponent<Text>();
timeleft = updateInterval;
}
private void Update()
{
timeleft -= Time.deltaTime;
accum += Time.timeScale / Time.deltaTime;
frames++;
if ((double)timeleft <= 0.0)
{
currentFPS = accum / (float)frames;
average += (Mathf.Abs(currentFPS) - average) * 0.1f;
median += Mathf.Sign(currentFPS - median) * Mathf.Min(average * medianLearnrate, Mathf.Abs(currentFPS - median));
float num = (showMedian ? median : currentFPS);
uguiText.text = $"{num:F2} FPS ({1000f / num:F1} ms)";
timeleft = updateInterval;
accum = 0f;
frames = 0;
}
}
public void ResetMedianAndAverage()
{
median = 0f;
average = 0f;
}
}