1. 程式人生 > >Unity3d自學記錄 關於幀率(fps)

Unity3d自學記錄 關於幀率(fps)

首先幀率是什麼?

遊戲單位時間內重新整理的次數,一般越高越好,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);
        }
    }

放兩張圖表示一下(嘿嘿0.0)

原始碼不要太厲害QAQ   學習學習