在Unity3d 中可以通过代码设置 来限定游戏帧率。
设置为 -1 表示不限定帧率。 转自http://blog.csdn.net/huutu
一般在手机游戏中我们限定帧率为30 就OK了。
但是把这个代码添加到工程之后,在Unity中运行起来发现并没有什么卵用。
大意就是说:
Application.targetFrameRate 是用来让游戏以指定的帧率运行,如果设置为 -1 就让游戏以最快的速度运行。
但是 这个 设定会 垂直同步 影响。
如果设置了垂直同步,那么 就会抛弃这个设定 而根据 屏幕硬件的刷新速度来运行。
如果设置了垂直同步为1,那么就是 60 帧。
如果设置了为2 ,那么就是 30 帧。
点击 菜单 Editor -> ProjectSetting -> QualitySettings 来打开渲染质量设置面板。
1、首先关掉垂直同步,如上图。
设置帧率为100
Application.targetFrameRate=100;
然后运行后的帧率是 100.
2、设置垂直同步为1
可以看到帧率为 60 帧左右跳动,完全无视了代码中的设定。
3、设定垂直同步为 2
可以看到帧率在 30帧左右跳动。
在游戏中显示帧率代码:
using UnityEngine;
using System.Collections;
using DG.Tweening;
public class NewBehaviourScript : MonoBehaviour
{
private float m_LastUpdateShowTime=0f; //上一次更新帧率的时间;
private float m_UpdateShowDeltaTime=0.01f;//更新帧率的时间间隔;
private int m_FrameUpdate=0;//帧数;
private float m_FPS=0;
void Awake()
{
Application.targetFrameRate=100;
}
// Use this for initialization
void Start ()
{
m_LastUpdateShowTime=Time.realtimeSinceStartup;
}
// Update is called once per frame
void Update ()
{
m_FrameUpdate++;
if(Time.realtimeSinceStartup-m_LastUpdateShowTime>=m_UpdateShowDeltaTime)
{
m_FPS=m_FrameUpdate/(Time.realtimeSinceStartup-m_LastUpdateShowTime);
m_FrameUpdate=0;
m_LastUpdateShowTime=Time.realtimeSinceStartup;
}
}
void OnGUI()
{
GUI.Label(new Rect(Screen.width/2,0,100,100),"FPS: "+m_FPS);
}
}
另给一个显示帧数的代码
using UnityEngine;
using System.Collections;
public class ShowFPS : MonoBehaviour {
/// <summary>
/// 每次刷新计算的时间 帧/秒
/// </summary>
public float updateInterval = 0.5f;
/// <summary>
/// 最后间隔结束时间
/// </summary>
private double lastInterval;
private int frames = 0;
private float currFPS;
// Use this for initialization
void Start () {
lastInterval = Time.realtimeSinceStartup;
frames = 0;
}
// Update is called once per frame
void Update () {
++frames;
float timeNow = Time.realtimeSinceStartup;
if (timeNow > lastInterval + updateInterval)
{
currFPS = (float)(frames / (timeNow - lastInterval));
frames = 0;
lastInterval = timeNow;
}
}
private void OnGUI()
{
GUILayout.Label("FPS:" + currFPS.ToString("f2"));
}
}