Last active
November 8, 2024 02:25
-
-
Save mstevenson/5103365 to your computer and use it in GitHub Desktop.
An accurate FPS counter for Unity. Works in builds.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using System.Collections; | |
public class Fps : MonoBehaviour | |
{ | |
private float count; | |
private IEnumerator Start() | |
{ | |
GUI.depth = 2; | |
while (true) | |
{ | |
count = 1f / Time.unscaledDeltaTime; | |
yield return new WaitForSeconds(0.1f); | |
} | |
} | |
private void OnGUI() | |
{ | |
GUI.Label(new Rect(5, 40, 100, 25), "FPS: " + Mathf.Round(count)); | |
} | |
} |
To get smooth FPS (Weighted average over time):
using UnityEngine;
using System.Collections;
public class Fps : MonoBehaviour
{
private float currentFps;
private float smoothedFps;
private float smoothingFactor = 0.1f; // Adjust this to control how much weight is given to recent FPS
private IEnumerator Start()
{
GUI.depth = 2;
while (true)
{
currentFps = 1f / Time.unscaledDeltaTime;
// Apply exponential smoothing to calculate the weighted average
smoothedFps = (smoothingFactor * currentFps) + (1f - smoothingFactor) * smoothedFps;
yield return new WaitForSeconds(0.1f);
}
}
private void OnGUI()
{
// Display the smoothed FPS
GUI.Label(new Rect(5, 40, 100, 25), "FPS: " + Mathf.Round(smoothedFps));
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this!
I've also added to @dginovker code:
[SerializeField] private Rect location = new (5, 5, 85, 25);
[SerializeField] private int fontSize = 18;
[SerializeField] private Color32 fontColor = Color.black;
to change things on the fly (I'm working on a VR title so I have to nudge things around due to screen real estate).
*Sorry for the multiple edits
** UPDATE OnGUI doesn't work within the headset, but will display on the Game window within the editor.