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); } } }
相关文章推荐
- 使用Docker Hub官方gcc:latest镜像编译C/C++程序以及缩小镜像的方法
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
- ArrayList的使用方法以及与vector的对比
- Google官方网络框架-Volley的使用解析Json以及加载网络图片方法
- {Unity} WebGL版本不能使用反射机制以及解决方法
- Spring Boot配置文件规则以及使用方法官方文档查找以及Spring项目的官方文档查找方法
- SharedPreferences的简单使用以及官方API给出的使用方法
- 14章类型信息-之类型转换前先做检查--之使用类字面常量--类名.class--以及动态instanceof(isInstance方法)----递归计数(计算各个类的个数)
- Python中使用Counter进行字典创建以及key数量统计的方法
- 7z压缩软件的使用方法以及与rar的对比
- 数据库结构以及数据对比工具方法使用教程
- 【Unity&对象数组】如何创建一个长度不确定的对象数组以及使用方法&墙壁单元方块对象数组
- python基础===文件对象的访问模式,以及计数循环的使用方法
- 14章类型信息-之类型转换前先做检查--之使用类字面常量--类名.class--以及动态instanceof(isInstance方法)----递归计数(计算各个类的个数)
- 用于统计数字使用次数的小方法
- 14章类型信息-之类型转换前先做检查--之使用类字面常量--类名.class--以及动态instanceof(isInstance方法)----递归计数(计算各个类的个数)
- Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV
- skfuzzy.cmeans与sklearn.KMeans聚类效果对比以及使用方法
- Goole官方网络框架-Volley的使用解析Json以及加载网络图片方法