帧率设置 及在游戏运行时显示帧率

32 篇文章 0 订阅
31 篇文章 0 订阅

在Unity3d 中可以通过代码设置 来限定游戏帧率。

[csharp] view plain copy
  1. Application.targetFrameRate=-1;  

设置为 -1 表示不限定帧率。 转自http://blog.csdn.net/huutu

一般在手机游戏中我们限定帧率为30 就OK了。

[csharp] view plain copy
  1. Application.targetFrameRate=30;  

但是把这个代码添加到工程之后,在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"));
    }

}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值