Unity基础包 工具类 FPSCounter脚本显示帧率
2016-12-06 10:44
441 查看
// 帧数计算器,需要UGUI来显示,其实可以通过写在OnGUI中显示 [RequireComponent(typeof (Text))] public class FPSCounter : MonoBehaviour { const float fpsMeasurePeriod = 0.5f; //FPS测量间隔 private int m_FpsAccumulator = 0; //帧数累计的数量 private float m_FpsNextPeriod = 0; //FPS下一段的间隔 private int m_CurrentFps; //当前的帧率 const string display = "{0} FPS"; //显示的文字 private Text m_Text; //UGUI中Text组件 private void Start() { m_FpsNextPeriod = Time.realtimeSinceStartup + fpsMeasurePeriod; //Time.realtimeSinceStartup获取游戏开始到当前的时间,增加一个测量间隔,计算出下一次帧率计算是要在什么时候 m_Text = GetComponent<Text>(); } private void Update() { // 测量每一秒的平均帧率 m_FpsAccumulator++; if (Time.realtimeSinceStartup > m_FpsNextPeriod) //当前时间超过了下一次的计算时间 { m_CurrentFps = (int) (m_FpsAccumulator/fpsMeasurePeriod); //计算 m_FpsAccumulator = 0; //计数器归零 m_FpsNextPeriod += fpsMeasurePeriod; //在增加下一次的间隔 m_Text.text = string.Format(display, m_CurrentFps); //处理一下文字显示 } } }
FPSShow
// 我的FPS显示,除了FPS显示功能外还有计算时间差功能public class FPSShow : MyUtil //继承MyUtil,个人习惯,表明Util层的内容,这边可以直接继承MonoBehaviour{// 单例private static FPSShow instance;public FPSShow(){instance = this;}public static FPSShow getInstance(){return instance;}// fpsfloat fpsPassTime = 0f; //fps计算经过了多少秒int fpsCount = 0; //当前fps的计数float fps = 0f; //最终每秒的fps数量// 时间差bool isNeedEndTime = false; //是否需要计算差值时间float startTime = 0f; //时间差开始的时间float endTime = 0f; //结束的时间// 获取一次时间public void getEndTime(){isNeedEndTime = true;}// 增加帧率计数,可以由外部到用,计算FixedUpdate、Update都是可以的,不过注意该函数最好只在一个地方调用public void calcFrame(){++fpsCount;}// 更新void Update (){calcFrame(); //计算fpsif (!gameSystem.isDebug)return;if (isNeedEndTime) //需要计算差值时间,把结束的时间给开始时间,然后结束时间赋值为当前时间,最后在OnGUI中计算一个差值{startTime = endTime;endTime = Time.time;isNeedEndTime = false;}fpsPassTime += Time.deltaTime; //增加fps经过的时间if(fpsPassTime > 2.0f) //超过2秒了,平均一下,计算出一秒的帧率{fps = fpsCount / fpsPassTime;fpsCount = 0;fpsPassTime = 0f;}}void OnGUI(){if (!gameSystem.isDebug) //是否在debug状态,可以注释return;// 输出黄色、40号大字,太小怕看不见(害羞)GUIStyle style = new GUIStyle();style.normal.background = null;style.normal.textColor = new Color(1.0f, 0.5f, 0.0f);style.fontSize = 40;// 显示!GUI.Label(new Rect(Screen.width / 2 - 40, 0, 200, 200), string.Format("FPS:{0:0.00}, dTime:{1:0.0000}", fps, endTime - startTime), style);}}
相关文章推荐
- Unity 半屏输入
- 【Unity】优化UGUI 滚动条ScrollRect(高效复用)
- 解决Unity鼠标坐标点转成世界坐标系坐标点
- UNITY自带的3D object没有三角形?
- 【Unity&DragonBones】像素角色人物骨骼动画教程(四)蒙皮骨骼动画使得角色动作更流畅
- Unity FixedUpdate 与 Update 的线程关系实验
- Shader Forge 学习网址
- Unity UGUI中,如果Image在Button前渲染拦截了事件怎么解决
- Unity3D 材料
- 我的Unity(4)一点一滴 自动寻路之自动巡逻
- Unity 定时器的几种实现方法
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
- Unity使用MonoDevelop进行断点调试
- Unity Shader入门(1)
- Unity 导航
- Unity 3D——NGUI初级(2)
- unity3D打包成apk
- Unity 屏幕坐标
- 【Unity&DragonBones】像素角色人物骨骼动画教程(三)骨骼动画人物奔跑起来
- unity获取本机的IP地址