Unity OnGUI实时显示游戏FPS

 更新时间:2019年11月01日 16:10:23   作者:Czhenya  
这篇文章主要为大家详细介绍了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);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#登入实例

    C#登入实例

    本篇文章通过截图的方式向大家展示C#程序登陆实现的全过程,利用了C#三层架构的编写方法,希望对大家今后编写代码有所帮助
    2016-11-11
  • C#文件操作、读取文件、Debug/Trace类用法

    C#文件操作、读取文件、Debug/Trace类用法

    这篇文章介绍了C#文件操作、读取文件、Debug/Trace类的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 使用C#快速搭建一个在windows运行的exe应用

    使用C#快速搭建一个在windows运行的exe应用

    这篇文章主要介绍了使用C#快速搭建一个在windows运行的exe应用,这是一个比较旧的内容,但是一直都没有空写,今天花点时间,把我掌握的C# 分享给初学的人或者感兴趣的人,希望能对你有一定帮助,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • C#利用雪花算法实现生成ID工具类

    C#利用雪花算法实现生成ID工具类

    雪花算法表示生成的ID如雪花般独一无二,该算法源自Twitter,主要用于解决分布式系统的唯一Id生成问题,本文主要介绍了C#如何利用利用雪花算法实现生成ID,需要的可以参考下
    2023-12-12
  • WPF调用Matlab函数的方法

    WPF调用Matlab函数的方法

    这篇文章主要为大家详细介绍了WPF调用Matlab函数的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • C#编程实现Excel文档中搜索文本内容的方法及思路

    C#编程实现Excel文档中搜索文本内容的方法及思路

    有了在Word文档中编程实现搜索文本的经验,在Excel中实现这个功能也并非难事。
    2013-07-07
  • C#时间戳基本用法实例分析

    C#时间戳基本用法实例分析

    这篇文章主要介绍了C#时间戳基本用法,较为详细的讲述了时间戳的概念、生成方法与转换技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • c# for循环中创建线程执行问题

    c# for循环中创建线程执行问题

    这篇文章主要介绍了有关c# for循环中创建线程执行问题,下面文章将将以举例的方式展开for循环中创建线程执行问题的内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • C# out关键词的应用实例

    C# out关键词的应用实例

    下面小编就为大家分享一篇C# out关键词的应用实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 使用C#9中records作为强类型ID的实例教程

    使用C#9中records作为强类型ID的实例教程

    这篇文章主要给大家介绍了关于使用C#9中records作为强类型ID的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论