Unity OnGUI实时显示游戏FPS
作者:Czhenya 发布时间:2021-10-05 22:53:39
标签:Unity,OnGUI,FPS
FPS是什么?
FPS (每秒传输帧数(Frames Per Second))【摘自百度百科】
FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是30。某些计算机视频格式,每秒只能提供15帧。
FPS”也可以理解为我们常说的“刷新率(单位为Hz)”,例如我们常在CS游戏里说的“FPS值”。我们在装机选购显卡和显示器的时候,都会注意到“刷新率”。一般我们设置缺省刷新率都在75Hz(即75帧/秒)以上。例如:75Hz的刷新率刷也就是指屏幕一秒内只扫描75次,即75帧/秒。而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。
电影以每秒24张画面的速度播放,也就是一秒钟内在屏幕上连续投射出24张静止画面。有关动画播放速度的单位是fps,其中的f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。电影是24fps,通常简称为24帧。
常见媒体的FPS帧率:
电影:24fps
电视(PAL):25fps
电视(NTSL):30fps
CRT显示器:75Hz以上
液晶显示器:一般为60Hz
在游戏过程中一般人不觉得卡顿的FPS频率大约是30Hz,想要达到流畅等级则需要60Hz
下面是实例代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// FPS 显示于OnGUI
/// </summary>
public class FPSOnGUIText : MonoBehaviour {
float updateInterval = 1.0f; //当前时间间隔
private float accumulated = 0.0f; //在此期间累积
private float frames = 0; //在间隔内绘制的帧
private float timeRemaining; //当前间隔的剩余时间
private float fps = 15.0f; //当前帧 Current FPS
private float lastSample;
void Start()
{
DontDestroyOnLoad(this.gameObject); //不销毁此游戏对象,在哪个场景都可以显示,,不需要则注释
timeRemaining = updateInterval;
lastSample = Time.realtimeSinceStartup; //实时自启动
}
void Update()
{
++frames;
float newSample = Time.realtimeSinceStartup;
float deltaTime = newSample - lastSample;
lastSample = newSample;
timeRemaining -= deltaTime;
accumulated += 1.0f / deltaTime;
if (timeRemaining <= 0.0f)
{
fps = accumulated / frames;
timeRemaining = updateInterval;
accumulated = 0.0f;
frames = 0;
}
}
void OnGUI()
{
GUIStyle style = new GUIStyle
{
border = new RectOffset(10, 10, 10, 10),
fontSize = 50,
fontStyle = FontStyle.BoldAndItalic,
};
//自定义宽度 ,高度大小 颜色,style
GUI.Label(new Rect(Screen.width/2-50, Screen.height - 100, 200, 200), "<color=#00ff00><size=30>" + "FPS:" + fps.ToString("f2")+ "</size></color>", style);
}
}
来源:https://blog.csdn.net/Czhenya/article/details/87889907


猜你喜欢
- 简单介绍华为鸿蒙系统应用开发工具 DevEco Studio的安装和使用据说12月份鸿蒙系统会推出手机的SDK哦,作为一名普通的开发者,表示
- 在学习monkeyrunner之前,让我们先搭建好eclipse安卓开发环境。对于程序开发人员而言,eclipse并不陌生,它提供了一个非常
- 题目要求阅读理解读完题的我be like:去看了遍英文版就懂了,题目中的种类【type】不是种类数…&hell
- 跟同事讨论到- 用C# Stopwatch 取得效能数值,Stopwatch.ElapsedMilliseconds 只到毫秒(ms),如果
- Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的respon
- 目录MultipartFile转FileFile转MultipartFile PS:file转base64字符串Multipart
- 尽管在实际开发过程中,我们一般使用ORM框架来代替传统的JDBC,例如Hibernate或者iBatis,但JDBC是Java用来实现数据访
- 方法一public static boolean isTablet(Context context) {
- Java8 LocalDateTime与timestamp转换将timestamp转为LocalDateTimepublic LocalDa
- 首先struts上传最大大小由两个地方决定. · struts.multipart.maxSize决定整个post的form最大是
- 前言可能对于很多新人来讲,看到这个题目,想到的能接收输入法输入的内容大概只有EditText和TextView这两个控件了,其实不然,只要是
- 前言前段时间看到了豆瓣FM的音乐播放界面,有一个环形的进度条,非常的好看,于是想了想,为什么不自己做一个呢,于是就开始了自定义的过程豆瓣FM
- 一 应用规划: ※ 确定功能。 ※ 必须的界面及界面跳转的流程。
- 1.向上转型 向下转型2.强制类型转换的应用应用多态性时由于引用为父类类型,导致编译时只能调用父类中声明的属性和方法。子类特有的属性和方法不
- 以下是测试代码:新建一个classlibrary,包含两个类class1和class2,这两个类中分别有一个方法,都是返回一个字符串,代码如
- 简述最近做的公司项目,图片比较多,不想给其存储到自己服务器上,就买了阿里云的OSS服务器来哦进行存储,其实集成第三方平台,一般没什么难度,当
- 现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个
- 现在,我们来讲一下怎么用Java来实现简单画板,要实现的功能有:选择图形(方形、圆形、多边形...)、可以选择颜色。首先,打开windows
- Java以命令模式设计模式1、简单介绍意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为
- 作为Android的四大组件之一,ContentProvider作为进程之间静态数据传递的重要手段,其在系统级别的应用中起了重大的作用。毫无