Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Mostrar fps reales

Iniciado por Gastonspas, Agosto 25, 2017, 01:06:04 AM

Tema anterior - Siguiente tema
Hola disculpen la molestia pero alguno sabe por que en unity cuando pongo "stats" me aparece ej : 100fps y en el script cuando mando a mostrar en pantalla aparece 60 ?
 
Alguno sabe por que. Muchas gracias por leer espero su respuesta.
 

var updateInterval = 0.1;
 
private var accum = 0.0;
private var frames = ;
private var timeleft : float;
var uifps : UI.Text;
 
function Start()
{
    timeleft = updateInterval;  
}
 
function Update()
{
    timeleft -= Time.deltaTime;
    accum += Time.timeScale/Time.deltaTime;
    ++frames;
    if( timeleft <= 0.0 )
    {
        uifps.text = "FPS : " + (accum/frames).ToString("f2");
        timeleft = updateInterval;
        accum = 0.0;
        frames = ;
    }
}

 
 

SIempre me pregunte lo mismo a lo primero pense que era algo del vsync, pero estaba activado, osea que no deberia superar los 60 +- cuando no estaba en full screen me daba como >100 fps (las stats de Unity) y en Fullscreen 70 aprox, nada que ver, incluso el profiler tambien decia cualquier cosa, la verdad ni idea, asi que me acostumbre a medir cuadro a cuadro los FPS como haces vos con algun script y te digo me da una estimacion mucho mas acertada (sino exacta) esté en el modo que esté, con vsync o no. Osea que te diria de entrada que el script esta bien. (fijate que podes usar unscaledDelteTime y no hacer ese cociente entre Time scale vs deltaTime que haces)
 
Yo hice casi lo mismo que vos, lo unico que en vez de tener un tiempo restante usaba cantidad de muestras.
 
Este es mi script:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FpsCounter : MonoBehaviour {

    public int maxSamples = 80;
    float result = ;
    int currentSample = ;
    float fps = 60;

     void Update () {
        if (currentSample < maxSamples){            
           result += 1 / Time.unscaledDeltaTime;  
           currentSample++;
   }else{
           fps = result / maxSamples;
           result = ;
           currentSample = ;
         }        
}
    void OnGUI() {
        GUILayout.Label("FPS = " + fps.ToString());
    }
}

 
Saludos

Etiquetas: