Unity官方使用的FPS 的 计数方法,以及得出用于统计对比的中位数,平均数,方差

Unity官方使用的FPS 的 计数方法,以及得出用于统计对比的中位数平均数,方差


还是直接代码吧。很简单的。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;

public class HUDFPS : MonoBehaviour 
{

 public float updateInterval = 0.1f;
 public float outputInterval = 10f;

 private float outputTime = 0;

 private float accum   = 0; // FPS accumulated over the interval
 private int   frames  = 0; // Frames drawn over the interval
 private float timeleft; // Left time for current interval

 List<float> fpsList = new List<float>();

 float fps ;
 float AverageNumber;
 float MedianNumber;
 float varianceNumber;



 void Start()
  {
  timeleft = updateInterval;
        QualitySettings.vSyncCount = 0;

  }

 void Update()
  {
  }

  void FixedUpdate()
    {
        outputTime += Time.deltaTime;

        timeleft -= Time.deltaTime;

        // Debug.Log(UnityStats.renderTime);
        if (timeleft <= 0.0)
        {
            fps = (0.1f / UnityStats.renderTime) * 10;
         //   Debug.Log("renderTime :" + UnityStats.renderTime);

            fpsList.Add(fps);
            timeleft = updateInterval;
        }
        if (outputTime > outputInterval)
        {
            Debug.Log("fps :" + AverageNumber);
            AverageNumber = GetAverageNumber(fpsList);
            Debug.Log("AverageNumber :" + AverageNumber);
            MedianNumber = GetMedianNumber(fpsList);
            Debug.Log("MedianNumber :" + MedianNumber);
            varianceNumber = GetvarianceNumber(fpsList);
            Debug.Log("varianceNumber :" + varianceNumber);
            outputTime = 0;
            fpsList.Clear();
        }
    }
    void OnGUI()   
  {  
  //GUILayout.Label("" + fps.ToString("f2") + " FPS");  
 // GUILayout.Label("" + AverageNumber.ToString("f2") + " Average");  
 // GUILayout.Label("" + MedianNumber.ToString("f2") + " Median");  
//  GUILayout.Label("" + varianceNumber.ToString("f2") + " variance");  
  }

 float number1;
 float number2;
 float number3;
 float GetMedianNumber(List<float> NumL)   //中位数
  {
        NumL.Sort ();

      if( NumL.Count % 2 == 0 )
       {
           number1 = NumL [NumL.Count / 2];
           number2 = NumL [(NumL.Count / 2) - 1];
           number3 = (number1 + number2) / 2;
           return number3;

       } else
       {
           number3 = NumL [(int)(NumL.Count / 2)];
           return number3;
       }
  }

 float number4 = 0;
 float GetAverageNumber(List<float> NumL)  //平均数
  { 
      number4 = 0;
      for(int a = 0;a < NumL.Count; a++)
       {
        number4+= NumL[a];
       }
      return (number4/NumL.Count);
  }

 float averageN;
 float sum;
 float GetvarianceNumber(List<float> NumL)   //方差
  {
      sum = 0;
      averageN = GetAverageNumber (NumL);
      for(int a = 0;a < NumL.Count; a++)
       {
         sum += Mathf.Pow((NumL [a] - averageN),2);
       }
      return sum / NumL.Count;
  }
}

如果感觉上面代码计算的不准确,可以使用以下Unity 官方插件中,计算Fps的方法。

using System;
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof (Text))]
public class FPSCounter : MonoBehaviour
{
    const float fpsMeasurePeriod = 0.5f;
    private int m_FpsAccumulator = 0;
    private float m_FpsNextPeriod = 0;
    private int m_CurrentFps;
    const string display = "{0} FPS";
    private Text m_Text;


    private void Start()
    {
        m_FpsNextPeriod = Time.realtimeSinceStartup + fpsMeasurePeriod;
        m_Text = GetComponent<Text>();
    }


    private void Update()
    {
        // measure average frames per second
        m_FpsAccumulator++;
        if (Time.realtimeSinceStartup > m_FpsNextPeriod)
        {
            m_CurrentFps = (int) (m_FpsAccumulator/fpsMeasurePeriod);
            m_FpsAccumulator = 0;
            m_FpsNextPeriod += fpsMeasurePeriod;
            m_Text.text = string.Format(display, m_CurrentFps);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值