Skip to content

Commit 6462682

Browse files
committed
Improve FPS display formatting
1 parent d728f4f commit 6462682

File tree

2 files changed

+65
-28
lines changed

2 files changed

+65
-28
lines changed

Prefabs/FPSDisplay.prefab

+4-21
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ GameObject:
1111
- component: {fileID: 2560411229158870742}
1212
- component: {fileID: 2560411229158870743}
1313
- component: {fileID: 2560411229158870744}
14-
- component: {fileID: 2560411229158870745}
1514
- component: {fileID: 7135560934737295104}
1615
m_Layer: 5
1716
m_Name: FPSDisplay
@@ -83,23 +82,6 @@ MonoBehaviour:
8382
m_FallbackScreenDPI: 96
8483
m_DefaultSpriteDPI: 96
8584
m_DynamicPixelsPerUnit: 1
86-
--- !u!114 &2560411229158870745
87-
MonoBehaviour:
88-
m_ObjectHideFlags: 0
89-
m_CorrespondingSourceObject: {fileID: 0}
90-
m_PrefabInstance: {fileID: 0}
91-
m_PrefabAsset: {fileID: 0}
92-
m_GameObject: {fileID: 2560411229158870746}
93-
m_Enabled: 1
94-
m_EditorHideFlags: 0
95-
m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
96-
m_Name:
97-
m_EditorClassIdentifier:
98-
m_IgnoreReversedGraphics: 1
99-
m_BlockingObjects: 0
100-
m_BlockingMask:
101-
serializedVersion: 2
102-
m_Bits: 4294967295
10385
--- !u!114 &7135560934737295104
10486
MonoBehaviour:
10587
m_ObjectHideFlags: 0
@@ -114,6 +96,7 @@ MonoBehaviour:
11496
m_EditorClassIdentifier:
11597
displayText: {fileID: 2560411230916416746}
11698
refreshRate: 1
99+
_decimals: 0
117100
--- !u!1 &2560411230916416749
118101
GameObject:
119102
m_ObjectHideFlags: 0
@@ -174,8 +157,8 @@ MonoBehaviour:
174157
m_EditorClassIdentifier:
175158
m_Material: {fileID: 0}
176159
m_Color: {r: 1, g: 1, b: 1, a: 1}
177-
m_RaycastTarget: 1
178-
m_Maskable: 1
160+
m_RaycastTarget: 0
161+
m_Maskable: 0
179162
m_OnCullStateChanged:
180163
m_PersistentCalls:
181164
m_Calls: []
@@ -192,7 +175,7 @@ MonoBehaviour:
192175
m_HorizontalOverflow: 1
193176
m_VerticalOverflow: 1
194177
m_LineSpacing: 1
195-
m_Text:
178+
m_Text: 0
196179
--- !u!114 &2560411230916416747
197180
MonoBehaviour:
198181
m_ObjectHideFlags: 0

Runtime/FPSDisplay.cs

+61-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using UnityEngine;
1+
using System.Text;
2+
using UnityEngine;
23
using UnityEngine.UI;
34

45
namespace Zigurous.Debug
@@ -16,30 +17,83 @@ public class FPSDisplay : MonoBehaviour
1617
public Text displayText;
1718

1819
/// <summary>
19-
/// How often per second the framerate display updates.
20+
/// The text format of the framerate display.
2021
/// </summary>
21-
[Tooltip("How often per second the framerate display updates.")]
22+
public string displayFormat { get; protected set; }
23+
24+
/// <summary>
25+
/// The amount of seconds between display updates.
26+
/// </summary>
27+
[Tooltip("The amount of seconds between display updates.")]
2228
public float refreshRate = 1.0f;
2329

30+
/// <summary>
31+
/// The number of decimal digits to display.
32+
/// </summary>
33+
[Tooltip("The number of decimal digits to display.")]
34+
[SerializeField]
35+
private int _decimals = 0;
36+
37+
/// <summary>
38+
/// The number of decimal digits to display.
39+
/// </summary>
40+
public int decimals
41+
{
42+
get => _decimals;
43+
set
44+
{
45+
_decimals = value;
46+
SetDisplayFormat(value);
47+
}
48+
}
49+
2450
/// <summary>
2551
/// The time of the next framerate update.
2652
/// </summary>
2753
protected float _nextUpdate;
2854

55+
private void OnValidate()
56+
{
57+
SetDisplayFormat(this.decimals);
58+
}
59+
60+
private void Awake()
61+
{
62+
SetDisplayFormat(this.decimals);
63+
}
64+
2965
private void Update()
3066
{
3167
if (Time.unscaledTime > _nextUpdate)
3268
{
33-
int fps = (int)(1.0f / Time.unscaledDeltaTime);
34-
UpdateDisplay(fps);
3569
_nextUpdate = Time.unscaledTime + this.refreshRate;
70+
71+
float fps = 1.0f / Time.unscaledDeltaTime;
72+
UpdateDisplay(fps);
3673
}
3774
}
3875

39-
protected virtual void UpdateDisplay(int fps)
76+
private void SetDisplayFormat(int decimals)
77+
{
78+
int length = 1 + decimals;
79+
if (decimals > 0) length++;
80+
81+
StringBuilder stringBuilder = new StringBuilder(length);
82+
stringBuilder.Append('0');
83+
84+
if (decimals > 0)
85+
{
86+
stringBuilder.Append('.');
87+
stringBuilder.Insert(2, "0", decimals);
88+
}
89+
90+
this.displayFormat = stringBuilder.ToString();
91+
}
92+
93+
protected virtual void UpdateDisplay(float fps)
4094
{
4195
if (this.displayText != null) {
42-
this.displayText.text = fps.ToString();
96+
this.displayText.text = fps.ToString(this.displayFormat);
4397
}
4498
}
4599

0 commit comments

Comments
 (0)