但是,这种方法存在问题。时间增量不是处理最后一帧所花费的实际时间,它受当前时间比例的影响。这意味着除非将时间标度设置为1,否则我们的FPS将是错误的。幸运的是,我们还可以向Unity请求未标度的时间增量。
该面板用于为FPS标签创建半透明的黑色背景。这样,它将始终可读。我把它放在窗口的左上角。将其锚点设置为左上角,以便无论窗口的大小如何都将其保留在适当的位置。将其枢轴设置为(0,1),以方便放置。
FPS标签现在正在更新!但是,由于我们将其设计为两位数,因此只要我们的帧速率超过99每秒,它就会显示无用的值。因此,让我们限制显示的值。无论如何,99以上的表现都足够好。
现在一切似乎都可以正常工作,但是存在一个细微的问题。现在,我们在每次更新时都创建一个新的字符串对象,在下次更新时将其丢弃。这会污染托管内存,这将触发垃圾回收器。尽管这对于台式机应用程序来说并不是什么大问题,但对于几乎没有可用内存的设备而言,这更为麻烦。它还会污染我们的探查器数据,这在您寻找分配时很烦人。
我们可以摆脱这些临时字符串吗?我们显示的值可以是0到99之间的任何整数。这是100个不同的字符串。为什么不一次创建所有这些字符串并重用它们,而不是始终重新创建相同的内容?
static string[] stringsFrom00To99 = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99" }; void Update () { fpsLabel.text =stringsFrom00To99[Mathf.Clamp(fpsCounter.FPS, 0, 99)]; }