如何获取Unity游戏时的FPS?
看了很多太复杂求高手 给个代码 O(∩_∩)O 我懒 谢谢{:soso__2891809371178566359_2:}JavaScript - FramesPerSecond.js// 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.
var updateInterval = 0.5;
private var accum = 0.0; // FPS accumulated over the interval
private var frames = 0; // Frames drawn over the interval
private var timeleft : float; // Left time for current interval
function Start()
{
if( !guiText )
{
print ("FramesPerSecond needs a GUIText component!");
enabled = false;
return;
}
timeleft = updateInterval;
}
function 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)
guiText.text = "" + (accum/frames).ToString("f2");
timeleft = updateInterval;
accum = 0.0;
frames = 0;
}
}CSharp HUDFPS.csA C# implementation of the above converted by Opless. The main difference is the colour change when FPS dips too low.
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.
publicfloat updateInterval = 0.5F;
private float accum = 0; // FPS accumulated over the interval
private int frames= 0; // 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 < 30)
guiText.material.color = Color.yellow;
else
if(fps < 10)
guiText.material.color = Color.red;
else
guiText.material.color = Color.green;
//DebugConsole.Log(format,level);
timeleft = updateInterval;
accum = 0.0F;
frames = 0;
}
}
}Boo FPS_Display.booA Boo implementation of the above converted by Philbywhizz.
import UnityEngine
class FPS_Display (MonoBehaviour):
public updateInterval as single = 0.5
private accum as single = 0 // FPS accumulated over the interval
private frames as int = 0 // Frames drawn over the interval
private timeleft as single // Left time for current interval
def Start ():
if(not guiText):
Debug.Log("FPS Display needs a GUIText component!")
enabled = false
timeleft = updateInterval
def Update ():
timeleft -= Time.deltaTime
accum += Time.timeScale/Time.deltaTime
++frames
if (timeleft <= 0.0):
fps = accum/frames
format = System.String.Format("FPS: {0:F2}", fps);
guiText.text = format
if(fps < 30):
guiText.material.color = Color.yellow
elif(fps < 10):
guiText.material.color = Color.red
else:
guiText.material.color = Color.green
timeleft = updateInterval
accum = 0.0
frames = 0直接贴到一个GUIText 上 {:soso__3529053643505418858_2:}
这个对我真的有帮助!!! 很不错 好帖就是要顶 很好哦 真心顶 不错不错 不错不错 楼主是超人