Unity联盟 发表于 2013-3-28 16:53

Unity3D获取FPS帧率代码 测试帧率

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.cs
A 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.boo
A 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

蓝杰稀饭 发表于 2013-3-29 12:34

就是不知道怎么使用

aaabbbsss12345 发表于 2014-4-26 10:20

好东西 学习 学习

xiaoanhuafei 发表于 2017-2-12 10:03

很不错

Cr.Ka 发表于 2017-2-12 10:10

顶顶多好

Falcon 发表于 2017-2-12 09:35

真心顶

xiaoanhuafei 发表于 2017-2-12 09:45

说的非常好

Steven 发表于 2017-2-12 09:37

LZ真是人才

水深 发表于 2017-2-25 12:09

楼主是超人

tangyu3 发表于 2017-2-25 12:14

顶顶多好
页: [1]
查看完整版本: Unity3D获取FPS帧率代码 测试帧率