Unity3D基于OnGUI实时显示FPS
程序员文章站
2023-11-09 19:01:46
帧率(frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(frames per second,简称:fps)或“赫兹”(hz)。此词多用于影视制作和电子游戏。...
帧率(frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(frames per second,简称:fps)或“赫兹”(hz)。此词多用于影视制作和电子游戏。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉暂留。
每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。
以下是在unity3d中显示fps的代码。
using unityengine; using system.collections; [addcomponentmenu( "utilities/hudfps")] public class fpscounter : monobehaviour { //fps 显示的初始位置和大小 public rect startrect=new rect(512, 10f, 75f, 50f ); //fps 过低时是否改变ui颜色 public bool updatecolor = true; //fps ui 是否允许拖动 public bool allowdrag = true; //fps 更新的频率 public float frequency = 0.5f; //fps 显示的精度 public int nbdecimal = 1; //一定时间内的fps数量 private float accum = 0f; //fps计算的时间 private int frames = 0; //gui 依赖fps的颜色 fps<10 红色 fps<30 黄色 fps>=30 绿色 private color color = color.white; //fps private string sfps = ""; //gui 的样式 private guistyle style; void start() { startcoroutine(fps()); } void update() { accum += time.timescale/ time.deltatime; ++frames; } ienumerator fps() { while( true ) { //更新fps float fps = accum/frames; sfps = fps.tostring( "f" + mathf.clamp( nbdecimal, 0, 10 ) ); //更新颜色 color = (fps >= 30) ? color.green : ((fps > 10) ? color.yellow : color.red); accum = 0.0f; frames = 0; yield return new waitforseconds( frequency ); } } void ongui() { if( style == null ){ style = new guistyle( gui.skin.label ); style.normal.textcolor = color.white; style.alignment = textanchor.middlecenter; } gui.color = updatecolor ? color : color.white; startrect = gui.window(0, startrect, domywindow, ""); } void domywindow(int windowid) { gui.label( new rect(0, 0, startrect.width, startrect.height), sfps + " fps", style ); if( allowdrag ) gui.dragwindow(new rect(0, 0, screen.width, screen.height)); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。