FramesPerSecond

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Removing all content from page)
m (Reverted edits by Joseph05408 (Talk); changed back to last version by Opless)
Line 1: Line 1:
 +
[[Category:MonoBehaviour]]
 +
[[Category:JavaScript]]
 +
[[Category:C Sharp]]
 +
[[Category:Heads Up Display Scripts]]
 +
[[Category:GUIText]]
 +
Author: Aras Pranckevicius (NeARAZ)
 +
==Description==
 +
Use this script on a [http://unity3d.com/Documentation/Components/class-GuiText.html GUIText] object to display a FPS (frames per second) indicator.
  
 +
It calculates frames/second over a defined interval, so the displayed number does not keep changing wildly. It is also fairly accurate at very low FPS counts (<10). The frames per second remain accurate if the time scale of the game is changed.
 +
 +
==JavaScript - FramesPerSecond.js==
 +
<javascript>
 +
// 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;
 +
    }
 +
}
 +
</javascript>
 +
 +
 +
== CSharp HUDFPS.cs ==
 +
 +
A C# implementation of the above converted by [[Opless]]. The main difference is the colour change when FPS dips too low.
 +
 +
<csharp>
 +
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.
 +
 +
public  float 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;
 +
    }
 +
}
 +
</csharp>

Revision as of 19:11, 19 October 2009

Author: Aras Pranckevicius (NeARAZ)

Description

Use this script on a GUIText object to display a FPS (frames per second) indicator.

It calculates frames/second over a defined interval, so the displayed number does not keep changing wildly. It is also fairly accurate at very low FPS counts (<10). The frames per second remain accurate if the time scale of the game is changed.

JavaScript - FramesPerSecond.js

<javascript> // 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;
   }

} </javascript>


CSharp HUDFPS.cs

A C# implementation of the above converted by Opless. The main difference is the colour change when FPS dips too low.

<csharp> 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.

public float 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;
   }

} </csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox