显示游戏FPS帧率的几种计算方式
FPSDisplay.cs using UnityEngine;
using System.Collections; public class FPSDisplay : MonoBehaviour
{
float deltaTime = 0.0f; void Update()
{
deltaTime += (Time.deltaTime - deltaTime) * 0.1f;
} void OnGUI()
{
int w = Screen.width, h = Screen.height; GUIStyle style = new GUIStyle(); Rect rect = new Rect(, , w, h * / );
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * / ;
style.normal.textColor = new Color (0.0f, 0.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
} FPSCounter.cs /* **************************************************************************
* FPS COUNTER
* **************************************************************************
* Written by: Annop "Nargus" Prapasapong
* Created: 7 June 2012
* *************************************************************************/ using UnityEngine;
using System.Collections; /* **************************************************************************
* CLASS: FPS COUNTER
* *************************************************************************/
[RequireComponent(typeof(GUIText))]
public class FPSCounter : MonoBehaviour {
/* Public Variables */
public float frequency = 0.5f; /* **********************************************************************
* PROPERTIES
* *********************************************************************/
public int FramesPerSec { get; protected set; } /* **********************************************************************
* EVENT HANDLERS
* *********************************************************************/
/*
* EVENT: Start
*/
private void Start() {
StartCoroutine(FPS());
} /*
* EVENT: FPS
*/
private IEnumerator FPS() {
for(;;){
// Capture frame-per-second
int lastFrameCount = Time.frameCount;
float lastTime = Time.realtimeSinceStartup;
yield return new WaitForSeconds(frequency);
float timeSpan = Time.realtimeSinceStartup - lastTime;
int frameCount = Time.frameCount - lastFrameCount; // Display it
FramesPerSec = Mathf.RoundToInt(frameCount / timeSpan);
gameObject.guiText.text = FramesPerSec.ToString() + " fps";
}
}
} HUDFPS.cs sing UnityEngine;
using System.Collections; [AddComponentMenu( "Utilities/HUDFPS")]
public class HUDFPS : MonoBehaviour
{
// Attach this to any object to make a frames/second indicator.
//
// It calculates frames/second over each updateInterval,
// so the display does not keep changing wildly.
//
// It is also fairly accurate at very low FPS counts (<10).
// We do this not by simply counting frames per interval, but
// by accumulating FPS for each frame. This way we end up with
// corstartRect overall FPS even if the interval renders something like
// 5.5 frames. public Rect startRect = new Rect( , , , ); // The rect the window is initially displayed at.
public bool updateColor = true; // Do you want the color to change if the FPS gets low
public bool allowDrag = true; // Do you want to allow the dragging of the FPS window
public float frequency = 0.5F; // The update frequency of the fps
public int nbDecimal = ; // How many decimal do you want to display private float accum = 0f; // FPS accumulated over the interval
private int frames = ; // Frames drawn over the interval
private Color color = Color.white; // The color of the GUI, depending of the FPS ( R < 10, Y < 30, G >= 30 )
private string sFPS = ""; // The fps formatted into a string.
private GUIStyle style; // The style the text will be displayed at, based en defaultSkin.label. void Start()
{
StartCoroutine( FPS() );
} void Update()
{
accum += Time.timeScale/ Time.deltaTime;
++frames;
} IEnumerator FPS()
{
// Infinite loop executed every "frenquency" secondes.
while( true )
{
// Update the FPS
float fps = accum/frames;
sFPS = fps.ToString( "f" + Mathf.Clamp( nbDecimal, , ) ); //Update the color
color = (fps >= ) ? Color.green : ((fps > ) ? Color.red : Color.yellow); accum = 0.0F;
frames = ; yield return new WaitForSeconds( frequency );
}
} void OnGUI()
{
// Copy the default label skin, change the color and the alignement
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(, startRect, DoMyWindow, "");
} void DoMyWindow(int windowID)
{
GUI.Label( new Rect(, , startRect.width, startRect.height), sFPS + " FPS", style );
if( allowDrag ) GUI.DragWindow(new Rect(, , Screen.width, Screen.height));
}
} HUDFPS.cs using UnityEngine;
using System.Collections; public class HUDFPS : MonoBehaviour
{ // Attach this to a GUIText to make a frames/second indicator.
//
// It calculates frames/second over each updateInterval,
// so the display does not keep changing wildly.
//
// It is also fairly accurate at very low FPS counts (<10).
// We do this not by simply counting frames per interval, but
// by accumulating FPS for each frame. This way we end up with
// correct overall FPS even if the interval renders something like
// 5.5 frames. public float updateInterval = 0.5F; private float accum = ; // FPS accumulated over the interval
private int frames = ; // Frames drawn over the interval
private float timeleft; // Left time for current interval void Start()
{
if( !guiText )
{
Debug.Log("UtilityFramesPerSecond needs a GUIText component!");
enabled = false;
return;
}
timeleft = updateInterval;
} void Update()
{
timeleft -= Time.deltaTime;
accum += Time.timeScale/Time.deltaTime;
++frames; // Interval ended - update GUI text and start new interval
if( timeleft <= 0.0 )
{
// display two fractional digits (f2 format)
float fps = accum/frames;
string format = System.String.Format("{0:F2} FPS",fps);
guiText.text = format; if(fps < )
guiText.material.color = Color.yellow;
else
if(fps < )
guiText.material.color = Color.red;
else
guiText.material.color = Color.green;
// DebugConsole.Log(format,level);
timeleft = updateInterval;
accum = 0.0F;
frames = ;
}
}
}
显示游戏FPS帧率的几种计算方式的更多相关文章
- php 关于金额的几种计算方式
php 关于金额的几种计算方式 平常开始开发过程中,多多少少都会遇到点关于金额的计算,比如设置返利.提现手续费.折扣啊等等诸如此类的比例,然后再计算出之后的实际的费用. 下面,以折扣为例,来实现这类计 ...
- mysql中TPS, QPS 的计算方式
今天突然有个同事问题一个问题, mysqlTPS和QPS的计算公式是什么? 以前确实也没有关注过这个计算公式,所以查了下学习了下: 下面是参考内容. 在做db基准测试的时候,qps,tps 是衡量数 ...
- css控制div显示/隐藏方法及2种方法比较原码 - czf164的专栏 - 博客频道 - CSDN.NET
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 三种计算c#程序运行时间的方法
三种计算c#程序运行时间的方法 第一种: 利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = S ...
- Android中EditText显示明文与密文的两种方式
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图 代码分析 方式一 /**方式一:*/ private void sh ...
- 【转】STM32: 一种计算CPU使用率的方法及其实现原理
1 前言出于性能方面的考虑,有的时候,我们希望知道CPU的使用率为多少,进而判断此CPU的负载情况和对于当前运行环境是否足够“胜任”.本文将介绍一种计算CPU占有率的方法以及其实现原理. 2 移植 ...
- Android中EditText显示明文与密码的两种方式
效果图如下所述: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...
- 两种计算Java对象大小的方法
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...
- 2016/2/24 1,css有几种引入方式 2,div除了可以声明id来控制,还可以声明什么控制? 3,如何让2个div,并排显示。4,清除浮动 clear:left / right / both
1,css有几种引入方式 使用HTML标签的STYLE属性 将STYLE属性直接加在单个的HTML元素标签上,控制HTML标签的表现样式.这种引入CSS的方式是分散灵活方便,但缺乏整体性和规划性,不利 ...
随机推荐
- Dubbo整合SpringCloud图片显示问题
Dubbo整合SpringCloud图片显示问题 Tips:公司项目,记录一点经验吧,理解的不对的地方欢迎大神指点 问题:商品图片上传功能(公司没有专门文件服务器)写的保存目录直接是保存在docker ...
- AOP流程分析
1. 注册AnnotationAwareAspectJAutoProxyCreator @EnableAspectJAutoProxy --> @Import(AspectJAutoProxyR ...
- 事务有哪些特性?spring的事务管理有几种方式实现,如何实现?
特性:1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并发执行的事 ...
- Acdream 1738 世风日下的哗啦啦族I 树套树
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- 动软代码生成器连接Oracle 11g
首先要说明的是:如果你连接的是远程的Oracle服务器,你本地机器必须装Oracle客户端,然后 用sqldeveloper 先建立一个连接. 然后你才能用.NET动软代码生成器连接到数据库. 因 ...
- QTP 10 破解 之路
1.下载QTP 10 安装包 2.破解软件(mgn-mqt82.exe) (阿里云云主机里执行不了,一执行CPU就99%,也没有生成lservrc) 手动创建C:\Program Files (x8 ...
- Object-C编程基础总结:
1,nil,NULL,NSNull:nil用来给对象附值,object—c里允许对象为空,空对象也可以接受消息.但是不允许指针为空,NULL是给任何指针附值的.所以NULL只在C或C++里才用.NSN ...
- Java常量字符串String理解 String理解
以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用 "equals" 3.Strin ...
- VB.net X86设置
在Visual Studio中,在任何项目中点击右键,选择项目属性->编译->高级编译选项
- 前端必备工具-Sublime Text 2
一个好的编辑器,能够大大地提高工作效率,editplus.notepad++都是不错的工具,体积小,启动速度快,想比之下Dreamweaver就太臃肿了,今天初使用Sublime Text 这个软件, ...