文档章节

Unity 中FPS的计算公式

o
 osc_t0zmqrod
发布于 2018/08/07 13:04
字数 330
阅读 10
收藏 0

精选30+云产品,助力企业轻松上云!>>>

代码如下,只是用到OnGUI和帧运算:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FPSShow : MonoBehaviour
{
	/// <summary>
	/// 刷新的时间间隔
	/// </summary>
	public float timerInterval = .5f;
	/// <summary>
	/// 是否显示
	/// </summary>
	public bool isShow = true;

	private float leftTimer = 0;

	/// <summary>
	/// 在区间内绘制帧
	/// </summary>
	private	int frames;
	/// <summary>
	/// FPS在间隔时间内累积
	/// </summary>
	private float accum = 0;
	/// <summary>
	/// 文本数据缓存
	/// </summary>
	private string textData = null;

	private GUIStyle guiStyle = new GUIStyle ();

	/// <summary>
	/// 区域
	/// </summary>
	private Rect posSize;
	/// <summary>
	/// 是否提示
	/// </summary>
	private bool already_Tip = false;
	/// <summary>
	/// 数量
	/// </summary>
	int low_cout = 0;

	void Start ()
	{  
//		#if UNITY_EDITOR||UNITY_STANDALONE_WIN
//		#else
//		Destroy(this);
//		return;
//		#endif
		DontDestroyOnLoad (gameObject);
		leftTimer = timerInterval;
		//文本默认颜色
		guiStyle.normal.textColor = Color.red;
		//文字大小
		guiStyle.fontSize = 12;
		//显示区域
		posSize = new Rect (0, 0, 70, 50);
	}

	void Update ()
	{
		++frames;

		leftTimer -= Time.deltaTime;
		accum += Time.timeScale / Time.deltaTime;

		//间隔结束   那么就更新GUI文本 并开始新的间隔
		if (leftTimer <= 0.0) {
			//显示两个小数(f2格式)
			float fps = accum / frames;

			//计算粒子系统
			int particleNum = CountParticleNum ();
			textData = System.String.Format ("FPS:{0:F2}, 粒子数:{1:d}", fps, particleNum);


			//只显示FPS
			//textData = System.String.Format ("FPS:{0:F2}", fps);

			if (fps < 20) {
				guiStyle.normal.textColor = Color.red;
			} else if (fps < 25) {
				guiStyle.normal.textColor = Color.yellow;
			} else {
				guiStyle.normal.textColor = Color.green;
			}
			leftTimer = timerInterval;
			accum = 0.0f;
			frames = 0;
		}
	}

	/// <summary>
	/// 在GUI中显示
	/// </summary>
	void OnGUI ()
	{
		if (isShow) {
			GUI.Label (posSize, textData, guiStyle);
		}
	}

	/// <summary>
	/// 计算当前场景粒子数量
	/// </summary>
	/// <returns>The particle number.</returns>
	int CountParticleNum ()
	{
		int totalNum = 0;
		ParticleSystem[] ps = GameObject.FindObjectsOfType <ParticleSystem> ();
		foreach (ParticleSystem item in ps) {
			if (item.isPlaying) {
				//同屏粒子数(当前被渲染数量)
				if (item.GetComponent <Renderer> () != null && item.GetComponent<Renderer> ().isVisible) {
					totalNum += item.particleCount;
				}
			}
		}
		return totalNum;
	}
}

  

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)

点击上方“陶陶技术笔记”关注我 回复“资料”获取作者整理的大量学习资料! 一、背景 在我上一篇文章《Spring Cloud开发人员如何解决服务冲突和实例乱窜?》中提到使用服务的元数据来实现隔...

zlt2000
2019/09/06
0
0
Linux下diff命令用法详解

大家好,我是良许。 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强...

osc_th8jvcw7
58分钟前
7
0
万变不离其宗之UART要点总结

[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为...

osc_kyehmyzk
59分钟前
7
0
kafka的认识、安装与配置

认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- 《Kafka:The Definitive Guide》 认识 Kafka 之前,先了解一下发布与订阅消息系统:消息的发送者不会直接把消息发送给接收...

osc_wy8nhxhn
今天
0
0
使用pandas进行数据处理——DataFrame篇

  今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构——DataFrame。   上一篇文章当中我们介绍了Series的用法,也提到了Series相当于一个一维的数组,只...

开源仔
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部