Unity3D基於OnGUI實時顯示FPS
阿新 • • 發佈:2020-01-07
幀率(Frame rate)是用於測量顯示幀數的量度。所謂的測量單位為每秒顯示幀數(Frames per Second,簡稱:FPS)或“赫茲”(Hz)。此詞多用於影視製作和電子遊戲。由於人類眼睛的特殊生理結構,如果所看畫面之幀率高於16的時候,就會認為是連貫的,此現象稱之為視覺暫留。
每秒的幀數(fps)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數。高的幀率可以得到更流暢、更逼真的動畫。一般來說30fps就是可以接受的,但是將效能提升至60fps則可以明顯提升互動感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了。如果幀率超過螢幕重新整理率只會浪費圖形處理的能力,因為監視器不能以這麼快的速度更新,這樣超過重新整理率的幀率就浪費掉了。
以下是在Unity3D中顯示fps的程式碼。
using UnityEngine; using System.Collections; [AddComponentMenu( "Utilities/HUDFPS")] public class FPSCounter : MonoBehaviour { //fps 顯示的初始位置和大小 public Rect startRect=new Rect(512,10f,75f,50f ); //fps 過低時是否改變UI顏色 public bool updateColor = true; //fps UI 是否允許拖動 public bool allowDrag = true; //fps 更新的頻率 public float frequency = 0.5F; //fps 顯示的精度 public int nbDecimal = 1; //一定時間內的fps數量 private float accum = 0f; //fps計算的時間 private int frames = 0; //GUI 依賴fps的顏色 fps<10 紅色 fps<30 黃色 fps>=30 綠色 private Color color = Color.white; //fps private string sFPS = ""; //GUI 的樣式 private GUIStyle style; void Start() { StartCoroutine(FPS()); } void Update() { accum += Time.timeScale/ Time.deltaTime; ++frames; } IEnumerator FPS() { while( true ) { //更新fps float fps = accum/frames; sFPS = fps.ToString( "f" + Mathf.Clamp( nbDecimal,10 ) ); //更新顏色 color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.yellow : Color.red); accum = 0.0F; frames = 0; yield return new WaitForSeconds( frequency ); } } void OnGUI() { if( style == null ){ style = new GUIStyle( GUI.skin.label ); style.normal.textColor = Color.white; style.alignment = TextAnchor.MiddleCenter; } GUI.color = updateColor ? color : Color.white; startRect = GUI.Window(0,startRect,DoMyWindow,""); } void DoMyWindow(int windowID) { GUI.Label( new Rect(0,startRect.width,startRect.height),sFPS + " FPS",style ); if( allowDrag ) GUI.DragWindow(new Rect(0,Screen.width,Screen.height)); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。