Unity3d自學記錄 關於幀率(fps)
阿新 • • 發佈:2018-12-19
首先幀率是什麼?
遊戲單位時間內重新整理的次數,一般越高越好,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 學習學習