Unity 中FPS的计算公式

本文介绍了一个简单的Unity脚本,用于实时显示游戏的帧率(FPS)和当前场景中的粒子数量。该脚本通过每0.5秒更新一次GUI来显示这些信息,并根据FPS数值改变文本颜色以指示性能状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下,只是用到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;
	}
}

  

转载于:https://www.cnblogs.com/bw1219/p/9436385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值