通過每0.5秒測量幀數(shù)(Update執(zhí)行的次數(shù))免钻,再相除并取整,得到每半秒更新一次的fps值崔拥。
不需要使用協(xié)程极舔,現(xiàn)將代碼粘貼如下。
public class FPSCounter : MonoBehaviour
? ? {
? ? ? ? const float fpsMeasurePeriod = 0.5f;? ? ??
//測量周期
? ? ? ? private int m_FpsAccumulator = 0;? ? ? ??
//累加器
? ? ? ? private float m_FpsNextPeriod = 0;????
//下一次測量的時間
? ? ? ? private int m_CurrentFps;? ? ? ? ? ? ? ??
//當前的fps
? ? ? ? const string display = "{0} FPS";
? ? ? ? private Text m_Text;
? ? ? ? private void Start()
? ? ? ? {
? ? ? ? ? ? m_FpsNextPeriod = Time.realtimeSinceStartup + fpsMeasurePeriod;
? ? ? ? ? ? m_Text = GetComponent<Text>();
? ? ? ? }
? ? ? ? private void Update()
? ? ? ? {
// 測量每秒的平均幀數(shù)
? ? ? ? ? ? m_FpsAccumulator++;
//游戲開始到現(xiàn)在的實時時間和下一次測量的標準時間做比較
? ? ? ? ? ? if (Time.realtimeSinceStartup > m_FpsNextPeriod)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? m_CurrentFps = (int) (m_FpsAccumulator/fpsMeasurePeriod);
//if成立時的積累了的幀數(shù)除以0.5链瓦,強制為整數(shù)
? ? ? ? ? ? ? ? m_FpsAccumulator = 0;
//重置幀數(shù)計數(shù)器
? ? ? ? ? ? ? ? m_FpsNextPeriod += fpsMeasurePeriod;? ? ? ? ? ? ? ? ? ? ??
//下一個if將在0.5秒后成立
? ? ? ? ? ? ? ? m_Text.text = string.Format(display, m_CurrentFps);? ? ? ?
//更新text組件
? ? ? ? ? ? }
? ? ? ? }
? ? }