Unity 基于OnGUI显示实时FPS
FPS(Frame rate)
用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简称:FPS)或“赫兹”(Hz),通俗来讲就是指动画或视频的画面数。FPS 是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低标准是 30。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。
电影以每秒24张画面的速度播放,也就是一秒钟内在屏幕上连续投射出24张静止画面。有关动画播放速度的单位是fps,其中的f就是英文单词 Frame(画面、帧),p 就是 Per(每),s 就是 Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。电影是24fps,通常简称为24帧。
常见媒体的FPS帧率
电影:24fps
电视(PAL):25fps
电视(NTSL):30fps
CRT显示器:75Hz以上
液晶显示器:一般为60Hz
在游戏过程中一般人不觉得卡顿的FPS频率大约是30Hz,想要达到流畅等级则需要60Hz
OnGUI显示实时FPS
1 using System.Collections; 2 using UnityEngine; 3 4 /// <summary> 5 /// OnGUI实时显示PFS 6 /// </summary> 7 public class FPSOnGUI : MonoBehaviour 8 { 9 //fps 显示的初始位置和大小 10 public Rect startRect = new Rect(512, 10f, 75f, 50f); 11 //fps 过低时是否改变UI颜色 12 public bool updateColor = true; 13 //fps UI 是否允许拖动 14 public bool allowDrag = true; 15 //fps 更新的频率 16 public float frequency = 0.5F; 17 //fps 显示的精度 18 public int nbDecimal = 1; 19 //一定时间内的fps数量 20 private float accum = 0f; 21 //fps计算的时间 22 private int frames = 0; 23 //GUI 依赖fps的颜色 fps<10 红色 fps<30 黄色 fps>=30 绿色 24 private Color color = Color.white; 25 //fps 26 private string sFPS = ""; 27 //GUI 的样式 28 private GUIStyle style; 29 30 void Start() 31 { 32 StartCoroutine(FPS()); 33 } 34 35 void Update() 36 { 37 accum += Time.timeScale / Time.deltaTime; 38 ++frames; 39 } 40 41 IEnumerator FPS() 42 { 43 while (true) 44 { 45 //更新fps 46 float fps = accum / frames; 47 sFPS = fps.ToString("f" + Mathf.Clamp(nbDecimal, 0, 10)); 48 49 //更新颜色 50 color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.yellow : Color.red); 51 52 accum = 0.0F; 53 frames = 0; 54 55 yield return new WaitForSeconds(frequency); 56 } 57 } 58 59 void OnGUI() 60 { 61 if (style == null) 62 { 63 style = new GUIStyle(GUI.skin.label); 64 style.normal.textColor = Color.white; 65 style.alignment = TextAnchor.MiddleCenter; 66 } 67 68 GUI.color = updateColor ? color : Color.white; 69 startRect = GUI.Window(0, startRect, DoMyWindow, ""); 70 } 71 72 //Window窗口 73 void DoMyWindow(int windowID) 74 { 75 GUI.Label(new Rect(0, 0, startRect.width, startRect.height), sFPS + " FPS", style); 76 if (allowDrag) GUI.DragWindow(new Rect(0, 0, Screen.width, Screen.height)); 77 } 78 79 }
显示效果
***| 以上内容仅为学习参考、学习笔记使用 |***
原文:https://blog.csdn.net/m0_37998140/article/details/78255799