Mostrar FPS
+2
igor1043
Água Sem Hidrogênio
6 participantes
Página 1 de 1
Mostrar FPS
Olá, como eu posso mostrar o FPS do meu jogo do Unity no meu celular? Eu já tentei usar vários FPs Counters porém todos mentiam para mim
Água Sem Hidrogênio- Avançado
- PONTOS : 2751
REPUTAÇÃO : 25
Respeito as regras :
Re: Mostrar FPS
esse vai funcionar, é só linkar em qualquer objeto da cena.
using UnityEngine;
using System.Collections;
public class fps : MonoBehaviour
{
float deltaTime = 0.0f;
void Update()
{
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color(9.0f, 9.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
}
using UnityEngine;
using System.Collections;
public class fps : MonoBehaviour
{
float deltaTime = 0.0f;
void Update()
{
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color(9.0f, 9.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
}
igor1043- Iniciante
- PONTOS : 2618
REPUTAÇÃO : 0
Idade : 25
Respeito as regras :
Re: Mostrar FPS
Eu utilizo um sistema parecido com o do amigo, mas é um pouco mais completo e já tem integração com o Ui da Unity:
- Código:
[RequireComponent(typeof (Text))]
public class FPSCounter : MonoBehaviour
{
const float fpsMeasurePeriod = 0.5f;
private int m_FpsAccumulator = 0;
private float m_FpsNextPeriod = 0;
private int m_CurrentFps;
const string display = "{0} FPS";
private Text m_Text;
private void Start()
{
m_FpsNextPeriod = Time.realtimeSinceStartup + fpsMeasurePeriod;
m_Text = GetComponent<Text>();
}
private void Update()
{
// measure average frames per second
m_FpsAccumulator++;
if (Time.realtimeSinceStartup > m_FpsNextPeriod)
{
m_CurrentFps = (int) (m_FpsAccumulator/fpsMeasurePeriod);
m_FpsAccumulator = 0;
m_FpsNextPeriod += fpsMeasurePeriod;
m_Text.text = string.Format(display, m_CurrentFps);
}
}
}
Re: Mostrar FPS
Neste tópico Também é apresentado um script funcional para exibir FPS na tela
https://www.schultzgames.com/t1472-ajuda-com-script-de-fps-frames-por-segundo?highlight=Frames
https://www.schultzgames.com/t1472-ajuda-com-script-de-fps-frames-por-segundo?highlight=Frames
JohnRambo- Moderador
- PONTOS : 5172
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Re: Mostrar FPS
Cara, GUI é praticamente Obsoleto na unity;igor1043 escreveu:esse vai funcionar, é só linkar em qualquer objeto da cena.
using UnityEngine;
using System.Collections;
public class fps : MonoBehaviour
{
float deltaTime = 0.0f;
void Update()
{
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
int w = Screen.width, h = Screen.height;
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, w, h * 2 / 100);
style.alignment = TextAnchor.UpperLeft;
style.fontSize = h * 2 / 100;
style.normal.textColor = new Color(9.0f, 9.0f, 0.5f, 1.0f);
float msec = deltaTime * 1000.0f;
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.0} ms ({1:0.} fps)", msec, fps);
GUI.Label(rect, text, style);
}
}
Começe a usar UI que você vai ver uma certa melhora de performance e uma maior facilidade;
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Mostrar FPS
É que depende cara, os FPSCounter vão mostrar quantos FPS o Update conseguiu alcançar, ou seja, quantas vezes a void Update foi chamada naquele segundo... então se a void Update for chamada 35 vezes por segundo, vai acusar 35 FPS... mas isto torna-se um problema quando o Vsync é ativado, pois alguns mecanismos da Unity vão fazer um yield para "limitar" o FPS em 60, e isto as vezes da problemas no counter.
mas a minha grande dúvida é, como você sabe que os FPSCounter estão 'mentindo para você' ???
mas a minha grande dúvida é, como você sabe que os FPSCounter estão 'mentindo para você' ???
Re: Mostrar FPS
Pelo fato de que na Stats da Unity acusa estar 400-500 Fps, enquanto no Counter, 100-150 :/MarcosSchultz escreveu:É que depende cara, os FPSCounter vão mostrar quantos FPS o Update conseguiu alcançar, ou seja, quantas vezes a void Update foi chamada naquele segundo... então se a void Update for chamada 35 vezes por segundo, vai acusar 35 FPS... mas isto torna-se um problema quando o Vsync é ativado, pois alguns mecanismos da Unity vão fazer um yield para "limitar" o FPS em 60, e isto as vezes da problemas no counter.
mas a minha grande dúvida é, como você sabe que os FPSCounter estão 'mentindo para você' ???
Ps.: Eu não ativei o VSyncCount
Água Sem Hidrogênio- Avançado
- PONTOS : 2751
REPUTAÇÃO : 25
Respeito as regras :
Re: Mostrar FPS
Stats da Unity é mais impreciso ainda... ele acusa todos os dados do Profiler, mas tem muita coisa por trásÁgua Sem Hidrogênio escreveu:Pelo fato de que na Stats da Unity acusa estar 400-500 Fps, enquanto no Counter, 100-150 :/MarcosSchultz escreveu:É que depende cara, os FPSCounter vão mostrar quantos FPS o Update conseguiu alcançar, ou seja, quantas vezes a void Update foi chamada naquele segundo... então se a void Update for chamada 35 vezes por segundo, vai acusar 35 FPS... mas isto torna-se um problema quando o Vsync é ativado, pois alguns mecanismos da Unity vão fazer um yield para "limitar" o FPS em 60, e isto as vezes da problemas no counter.
mas a minha grande dúvida é, como você sabe que os FPSCounter estão 'mentindo para você' ???
Ps.: Eu não ativei o VSyncCount
O FPS REAL seria as chamadas de renderização, ou seja, a void LateUpdate... você pode fazer um FPSCounter baseado nela.
a void FixedUpdate vai dar SEMPRE 50FPS e a void Update, em teoria andaria junto com a void LateUpdate
Re: Mostrar FPS
então a única coisa que eu deveria mudar, seria substituir Update por LateUpdate? Certo?MarcosSchultz escreveu:Stats da Unity é mais impreciso ainda... ele acusa todos os dados do Profiler, mas tem muita coisa por trásÁgua Sem Hidrogênio escreveu:Pelo fato de que na Stats da Unity acusa estar 400-500 Fps, enquanto no Counter, 100-150 :/MarcosSchultz escreveu:É que depende cara, os FPSCounter vão mostrar quantos FPS o Update conseguiu alcançar, ou seja, quantas vezes a void Update foi chamada naquele segundo... então se a void Update for chamada 35 vezes por segundo, vai acusar 35 FPS... mas isto torna-se um problema quando o Vsync é ativado, pois alguns mecanismos da Unity vão fazer um yield para "limitar" o FPS em 60, e isto as vezes da problemas no counter.
mas a minha grande dúvida é, como você sabe que os FPSCounter estão 'mentindo para você' ???
Ps.: Eu não ativei o VSyncCount
O FPS REAL seria as chamadas de renderização, ou seja, a void LateUpdate... você pode fazer um FPSCounter baseado nela.
a void FixedUpdate vai dar SEMPRE 50FPS e a void Update, em teoria andaria junto com a void LateUpdate
Água Sem Hidrogênio- Avançado
- PONTOS : 2751
REPUTAÇÃO : 25
Respeito as regras :
Re: Mostrar FPS
Não... como eu disse, LateUpdate e Update são chamados de mesma maneira, é um dependente do outro... pode até checar:
O que está acontecendo é que você está usando uma métrica errada de comparação... no Stats, o FPS que aparece é só do graphics, mas não leva em consideração os códigos... E outra coisa, com Vsync desativado, você não vai ter uma métrica realista com a maioria dos PC's, pois quase todos limitam os FPS com o Vsync, para evitar processamento demasiado sem necessidade...
- Código:
using UnityEngine;
using System.Collections;
public class FPSCounter : MonoBehaviour{
float deltaTime = 0.0f;
float deltaTime2 = 0.0f;
void Update(){
deltaTime += (Time.unscaledDeltaTime - deltaTime) * 0.1f;
}
void LateUpdate(){
deltaTime2 += (Time.unscaledDeltaTime - deltaTime2) * 0.1f;
}
void OnGUI(){
GUI.Label(new Rect(10,10,100,30), (1.0f / deltaTime).ToString());
GUI.Label(new Rect(10,30,100,30), (1.0f / deltaTime2).ToString());
}
}
O que está acontecendo é que você está usando uma métrica errada de comparação... no Stats, o FPS que aparece é só do graphics, mas não leva em consideração os códigos... E outra coisa, com Vsync desativado, você não vai ter uma métrica realista com a maioria dos PC's, pois quase todos limitam os FPS com o Vsync, para evitar processamento demasiado sem necessidade...
Re: Mostrar FPS
Vá em Edit>ProjectSettings>Quality e procure por "VSyncCount" e selecione a segunda opção
você pode ver que o número de vezes que o Update será chamado é exatamente 60 (no caso de não ser menos)
você pode ver que o número de vezes que o Update será chamado é exatamente 60 (no caso de não ser menos)
Tópicos semelhantes
» Mostrar objetivos
» Mostrar Pontuação no game over
» Mostrar Pontuação No Game Over
» [RESOLVIDO] MOSTRAR CURSOR QUANDO MORRE
» Mostrar a contagem em 10K e 100M
» Mostrar Pontuação no game over
» Mostrar Pontuação No Game Over
» [RESOLVIDO] MOSTRAR CURSOR QUANDO MORRE
» Mostrar a contagem em 10K e 100M
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos