Unity笔记(A):FPS帧率计数

原创
2017/07/02 20:56
阅读数 465

Unity里C#实现一个简单的帧率计数器:

public class FPSCounter : MonoBehaviour
{
    private const int LEVEL = 5;
    private const int NUMBER = 1 << LEVEL;
    private const int MASK = NUMBER - 1;
    [SerializeField]
    private Text text;
    private int index = 0;
    private float counter = 0.0f;
    private float[] memory = new float[NUMBER];

    void Update()
    {
        index = (index + 1) & MASK;
        counter -= memory[index];
        counter += Time.deltaTime;
        memory[index] = Time.deltaTime;
        text.text = (NUMBER / counter).ToString();
    }
}

 

这个计数器需要一个UGUI的Text控件text以显示帧率,在Inspector面板设置这个text。

分析:

这个计数器构建一个环形缓存,在每帧的Update里按如下方式计数:

1.弹出环形缓存最旧的一个值(该值是很多帧以前的deltaTime),counter减去该值。

2.获取当前帧的deltaTime,counter累加deltaTime,同时把deltaTime压入环形缓存。

3.计算帧率,环形缓存的大小NUMBER(即总帧数)除以counter(即总时间)得到帧率。

注:

1.环形缓存用求余来保证索引不越界

2.由于求2的幂的余可以用按位与(&)代替,所以LEVEL是幂次数,该值影响环形缓存的大小所以不能太大。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部