您的位置:首页 > 移动开发 > Unity3D

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

2017-09-28 17:11 573 查看

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.Co
4000
unt / 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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐