2017-08-16 14:03:39 jbl20078 阅读数 693

Application.targetFrameRate 可以指定游戏的运行帧率, -1 让游戏以最快的速度运行。


void Awake(){
		///设置帧频
		Application.targetFrameRate = _FPS;
	}

显示FPS代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FPSInfo : MonoBehaviour {
	public  float _updateRateTime = 1f;     		//更新帧显示帧数的时间
	public  int   _FPS = 60;                        //默认帧频

	private float _lastUpdateShowTime = 0f;         //上次更新频率的时间
	private int   _frameCount;                      //每次统计时间之间运行多少针
	private float _finalFPS;                        //实际帧数

	void Awake(){
		///设置帧频
		Application.targetFrameRate = _FPS;
	}
	// Use this for initialization
	void Start () {
		_lastUpdateShowTime = Time.realtimeSinceStartup;
		_frameCount = 0;
	}
	
	// Update is called once per frame
	void Update () {
		_frameCount++;
		if(Time.realtimeSinceStartup - _lastUpdateShowTime >= _updateRateTime){
			_finalFPS = _frameCount/(Time.realtimeSinceStartup - _lastUpdateShowTime);
			_lastUpdateShowTime = Time.realtimeSinceStartup;
			_frameCount = 0;
		}
	}

	/// <summary>
	/// on gui
	/// </summary>
	void OnGUI(){
		GUIStyle fontStyle = new GUIStyle();
		fontStyle.normal.background = null;
		fontStyle.normal.textColor = new Color(1,0,0);
		fontStyle.alignment = TextAnchor.UpperRight;
		fontStyle.fontSize = 20;
		GUI.Label(new Rect(Screen.width-100,0,100,100),"FPS: "+string.Format("{0:f2}", _finalFPS),fontStyle);
	}
}


特别注意:

设置游戏帧数的时候请关闭垂直同步,不然会根据屏幕刷新率来设定帧数。

2013-12-27 10:28:56 spiritring 阅读数 4455

    static void Start()
    {
        if (Application.platform == RuntimePlatform.WindowsPlayer)
        {
            Screen.SetResolution(960, 640, false);
        }
        Application.targetFrameRate = 60;
    }

ios上面的帧频30... 如果想更改直接脚本中加入 Application.targetFrameRate = 60; 就会真正跑60. 其他的方法修改垂直同步之类都没有变化.

static Void SetResolution(Int32 width, Int32 height, Boolean fullscreen, Int32 preferredRefreshRate)

该函数.修改分辨率是ok的. 但是第四个参数的刷新率修改是没有效果的.所以可以这样设置平台和刷新率.


2016-01-25 21:47:00 weixin_33939380 阅读数 56

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

Application.targetFrameRate=-1;

设置为 -1 表示不限定帧率。

转自http://blog.csdn.net/huutu

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

Application.targetFrameRate=30;

可是把这个代码加入到project之后。在Unity中执行起来发现并没有什么卵用。。。

转自http://blog.csdn.net/huutu

于是到官网查看资料

http://docs.unity3d.com/ScriptReference/Application-targetFrameRate.html

Application.targetFrameRate
public static int targetFrameRate;
Description

Instructs game to try to render at a specified frame rate.

Setting targetFrameRate to -1 (the default) makes standalone games render as fast as they can, 

and web player games to render at 50-60 frames/second depending on the platform.

Note that setting targetFrameRate does not guarantee that frame rate. 

There can be fluctuations due to platform specifics, or the game might not achieve the frame rate because the computer is too slow.

If vsync is set in quality setting, the target framerate is ignored, and the vblank interval is used instead. 

The vBlankCount property on qualitysettings can be used to limit the framerate to half of the screens refresh rate 

(60 fps screen can be limited to 30 fps by setting vBlankCount to 2)

targetFrameRate is ignored in the editor.

大意就是说:

Application.targetFrameRate 是用来让游戏以指定的帧率执行。假设设置为 -1 就让游戏以最快的速度执行。

可是 这个 设定会 垂直同步 影响。

假设设置了垂直同步,那么 就会抛弃这个设定 而依据 屏幕硬件的刷新速度来执行。

假设设置了垂直同步为1,那么就是 60 帧。

假设设置了为2 ,那么就是 30 帧。


点击 菜单  Editor -> ProjectSetting -> QualitySettings 来打开渲染质量设置面板。

转自http://blog.csdn.net/huutu

1、首先关掉垂直同步。如上图。

设置帧率为100


然后执行后的帧率是 100.



2、设置垂直同步为1


能够看到帧率为 60 帧左右跳动,全然无视了代码中的设定。

转自http://blog.csdn.net/huutu

3、设定垂直同步为 2


能够看到帧率在 30帧左右跳动。

转自http://blog.csdn.net/huutu

在游戏中显示帧率代码:

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);
	}
}

官网文档中的最后一句……经測试在编辑器状态下是有效的。。


2014-03-21 10:25:29 luxiaoyu_sdc 阅读数 4151

unity3d 定时器的使用

//Time类包含了一个重要的类变量deltaTime,它表示距上一次调用Update或FixedUpdate所用的时间。   
  1. //因此通过它可以让游戏对象按照一个常速进行旋转,而不是依赖于它的帧频:   
  2. function Update()  
  3. {  
  4.    tranform.Rotate(0, 5 * Time.deltaTime, 0);  
  5. }  
  6.    
  7. //同样地移动效果:   
  8. function Update()  
  9. {  
  10.    transform.Translate(0, 0, 2 * Time.deltaTime);  
  11. }  
  12.    
  13. //如果想要一个值根据每帧的变化而变化(增加或减少) ,你应该使用 Time.deltaTime来乘以这个值。这样才能使得变化的效果依赖于单位时间,而不是帧频。这不仅使得游戏的运行独立于帧频,也使得运动的效果符合现实。   
  14. //同理,要让灯光的照射范围在每秒使半径增加 2个单位,可进行如下编码:   
  15. function Update()  
  16. {  
  17.    light.range += 2.0 * Time.deltaTime;  
  18. }  
  19.    
  20. //但是在通过force来处理rigidbody时,一般情况下不要乘以 Time.deltaTime,因为 Unity引擎已经为你进行了处理   
  21.    
  22. 2  
  23. IEnumerator wait(int seconds){  
  24.   yield return new WaitForSeconds(seconds);  
  25.  }  
  26. StartCoroutine(wait(2));  // 在Update() 中调用好像无效   
  27. //在JS中可以直接用 yield WaitForSeconds(3);   
  28.    
  29. //3 定时器的使用   
  30. using UnityEngine;     
  31. using System.Collections;     
  32. public class NewBehaviourScript : MonoBehaviour {     
  33. // Use this for initialization      
  34. void Start () {     
  35.    InvokeRepeating("LaunchProjectile", 1,5);//1秒后调用LaunchProjectile () 函数,之后每5秒调用一次      
  36. }     
  37. // Update is called once per frame      
  38. void Update () {     
  39.    if (Input.GetButton ("Fire")) {     
  40.     CancelInvoke();     
  41.    }     
  42. }     
  43. void LaunchProjectile () {     
  44.    print("hello");     
  45. }     
  46. }    

 

2017-09-01 17:31:18 xiuzhentianting 阅读数 649
void Awake () {
     QualitySettings.vSyncCount = 0;  // VSync must be disabled
     Application.targetFrameRate = 45;
 }

unity3d 计时器

阅读数 78

Unity3d Time的使用

阅读数 743

没有更多推荐了,返回首页