using UnityEngine; using UnityEngine.UI; namespace Crosstales.UI.Util { /// Simple FPS-Counter. [DisallowMultipleComponent] public class FPSDisplay : MonoBehaviour { #region Variables /// Text component to display the FPS. [Tooltip("Text component to display the FPS.")] public Text FPS; /// Update every set frame (default: 5). [Tooltip("Update every set frame (default: 5)."), Range(1, 300)] public int FrameUpdate = 5; [Tooltip("Key to activate the FPS counter (default: none).")] public KeyCode Key = KeyCode.None; private float deltaTime; private float elapsedTime; private float msec; private float fps; private const string wait = "...calculating FPS..."; private const string red = "FPS: {0:0.} ({1:0.0} ms)"; private const string orange = "FPS: {0:0.} ({1:0.0} ms)"; private const string green = "FPS: {0:0.} ({1:0.0} ms)"; #endregion #region MonoBehaviour methods private void Update() { if (Key == KeyCode.None || Input.GetKey(Key)) { deltaTime += (Time.deltaTime - deltaTime) * 0.1f; elapsedTime += Time.deltaTime; if (elapsedTime > 1f) { if (Time.frameCount % FrameUpdate == 0) { FPS.enabled = true; msec = deltaTime * 1000f; fps = 1f / deltaTime; if (fps < 15f) { FPS.text = string.Format(red, fps, msec); } else if (fps < 29f) { FPS.text = string.Format(orange, fps, msec); } else { FPS.text = string.Format(green, fps, msec); } } } else { FPS.text = wait; } } else { //elapsedTime = 0; FPS.enabled = false; } } #endregion } } // © 2017-2023 crosstales LLC (https://www.crosstales.com)