首先帧率是什么?
游戏单位时间内刷新的次数,一般越高越好,30fps视为流畅。
其中的f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。
那,在Unity3d里。如何去计算帧率呢?
帧率=固定时间的帧数/固定时间
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//需要把这个脚本拖放到一个UI物体上哦
[RequireComponent(typeof(Text))]//需要有Text组件
public class Test : MonoBehaviour {
const float fpsMeasurePeriod = 0.5f;//固定时间为0.5s
private int m_FpsAccumulator = 0;
private float m_FpsNextPeriod = 0;
private int m_CurrentFps;
const string display = "{0} FPS";//输出格式
private Text mText;
private void Start()
{
//Time.realtimeSinceStartup 游戏开始的真实时间
m_FpsNextPeriod = Time.realtimeSinceStartup + fpsMeasurePeriod;//下一次刷新时间
mText=this.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;
mText.text = string.Format(display, m_CurrentFps);
}
}
}
以上就是我了解到的关于fps的一些知识,但是还有一点,帧率的话,单位应该是HZ,那么王者荣耀右上角的以ms为单位的是什么?ms是毫秒,1秒等于1000毫秒,就是你发出指令比如点击鼠标到服务器响应你的指令所需要的时间,即常说的ping,这个越低越好,这个与网速有关,计算方法也挺简单那,只需要在Update方法里再加一句(修改后):
private void Update()
{
// measure average frames per second
//计算每秒的平均帧数
m_FpsAccumulator++;
if (Time.realtimeSinceStartup > m_FpsNextPeriod)
{
m_CurrentFps = (int)(m_FpsAccumulator / fpsMeasurePeriod);
float milliSecond = fpsMeasurePeriod * 1000 / m_CurrentFps;//乘以1000换成ms
m_FpsAccumulator = 0;
m_FpsNextPeriod += fpsMeasurePeriod;
mText.text = string.Format(display, m_CurrentFps);
}
}
咳咳安利一个源码网站(素材,教程(比较老)都是免费的),这个FPSdemo就是搁那下的:http://www.aigei.com/game-code/code/unity3d/
放两张图表示一下(嘿嘿0.0)
源码不要太厉害QAQ 学习学习