Skip to content

Commit 0e49730

Browse files
committed
Added features. Minor improvements.
1 parent f0ea12a commit 0e49730

14 files changed

+200
-51
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## [1.1.0]
2+
3+
### Added
4+
- Global `RSM` settings
5+
- Automatic initialization at startup
6+
- Canvas sort order
7+
- Don't destroy when scene changed
8+
- Changelog
9+
10+
### Changed
11+
- encapsulated public `RSMCore` parameters
12+
- improved code architecture

CHANGELOG.md.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/InstantiateStatsMonitor.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
1+
#if UNITY_EDITOR
2+
using RightStatsMonitor.Core;
13
using UnityEditor;
24
using UnityEngine;
35

46
namespace RightStatsMonitor.Editor
57
{
6-
public class InstantiateStatsMonitor : MonoBehaviour
8+
internal sealed class InstantiateStatsMonitor : MonoBehaviour
79
{
10+
[MenuItem("Tools/RightStatsMonitor/Settings")]
11+
private static void OpenRsmSettings()
12+
{
13+
Selection.activeObject = RsmSettings.Instance;
14+
}
15+
816
[MenuItem("Tools/RightStatsMonitor/Add to scene")]
917
private static void InstStatsMonitorInTheScene()
1018
{
11-
if (GameObject.Find("RSM")) EditorUtility.DisplayDialog("RightStatsMonitor is already in the scene",
19+
if (FindObjectOfType<RSMCore>()) EditorUtility.DisplayDialog("RightStatsMonitor is already in the scene",
1220
"", "OK");
1321
else Instantiate(Resources.Load("RightStatsMonitor")).name = "RSM";
1422
}
1523
}
1624
}
25+
#endif

Editor/inc8877.RightStatsMonitor.Editor.asmdef

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"name": "inc8877.RightStatsMonitor.Editor",
33
"rootNamespace": "",
44
"references": [
5-
"GUID:343deaaf83e0cee4ca978e7df0b80d21"
5+
"GUID:343deaaf83e0cee4ca978e7df0b80d21",
6+
"GUID:cf1500d7110284458ad5af39c28251a4"
67
],
78
"includePlatforms": [
89
"Editor"

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ Useful tool for displaying FPS with high precision. Very lightweight and fast. G
2929

3030
## How to use
3131

32-
1. [Install](#installation) RSM
33-
2. Add RSM to scene by following this path `Tools > RightStatsMonitor > Add to scene`
32+
1. [Install](#installation) `RSM`
33+
2. Use available actions to interact with the `RSM` via `Tools > RightStatsMonitor`
34+
35+
The `RSM` has global settings like target frame rate, canvas sort order, initialize at startup, and more.
36+
You can customize the way you want, to do this, just open the settings under this path `Tools> RightStatsMonitor> Preferences`.
3437

3538
## Installation
3639

Resources/RSM Settings.asset

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: e01fa188869148b4a03249774d8c64ab, type: 3}
13+
m_Name: RSM Settings
14+
m_EditorClassIdentifier:
15+
targetFrameRate: 60
16+
fpsUpdateTime: 500
17+
ramUpdateTime: 1
18+
initializeAtRuntime: 1
19+
dontDestroy: 1
20+
canvasSortOrder: 1000

Resources/RSM Settings.asset.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Resources/RightStatsMonitor.prefab

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ GameObject:
99
serializedVersion: 6
1010
m_Component:
1111
- component: {fileID: 347657964079713668}
12-
- component: {fileID: 2478994870295797370}
1312
- component: {fileID: 1349660970666911523}
1413
- component: {fileID: 5868185528139508119}
14+
- component: {fileID: 2478994870295797370}
1515
m_Layer: 5
1616
m_Name: holder
1717
m_TagString: Untagged
@@ -29,6 +29,7 @@ RectTransform:
2929
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
3030
m_LocalPosition: {x: 0, y: 0, z: 0}
3131
m_LocalScale: {x: 1, y: 1, z: 1}
32+
m_ConstrainProportionsScale: 0
3233
m_Children:
3334
- {fileID: 8875935558411196955}
3435
- {fileID: 8875935558876371609}
@@ -42,32 +43,6 @@ RectTransform:
4243
m_AnchoredPosition: {x: 0, y: 0}
4344
m_SizeDelta: {x: 0, y: 0}
4445
m_Pivot: {x: 0.5, y: 0.5}
45-
--- !u!114 &2478994870295797370
46-
MonoBehaviour:
47-
m_ObjectHideFlags: 0
48-
m_CorrespondingSourceObject: {fileID: 0}
49-
m_PrefabInstance: {fileID: 0}
50-
m_PrefabAsset: {fileID: 0}
51-
m_GameObject: {fileID: 38949635530650448}
52-
m_Enabled: 1
53-
m_EditorHideFlags: 0
54-
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
55-
m_Name:
56-
m_EditorClassIdentifier:
57-
m_Padding:
58-
m_Left: 12
59-
m_Right: 0
60-
m_Top: 3
61-
m_Bottom: 3
62-
m_ChildAlignment: 0
63-
m_Spacing: 0
64-
m_ChildForceExpandWidth: 1
65-
m_ChildForceExpandHeight: 1
66-
m_ChildControlWidth: 1
67-
m_ChildControlHeight: 1
68-
m_ChildScaleWidth: 0
69-
m_ChildScaleHeight: 0
70-
m_ReverseArrangement: 0
7146
--- !u!222 &1349660970666911523
7247
CanvasRenderer:
7348
m_ObjectHideFlags: 0
@@ -106,6 +81,32 @@ MonoBehaviour:
10681
m_FillOrigin: 0
10782
m_UseSpriteMesh: 0
10883
m_PixelsPerUnitMultiplier: 2
84+
--- !u!114 &2478994870295797370
85+
MonoBehaviour:
86+
m_ObjectHideFlags: 0
87+
m_CorrespondingSourceObject: {fileID: 0}
88+
m_PrefabInstance: {fileID: 0}
89+
m_PrefabAsset: {fileID: 0}
90+
m_GameObject: {fileID: 38949635530650448}
91+
m_Enabled: 1
92+
m_EditorHideFlags: 0
93+
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
94+
m_Name:
95+
m_EditorClassIdentifier:
96+
m_Padding:
97+
m_Left: 20
98+
m_Right: 0
99+
m_Top: 3
100+
m_Bottom: 3
101+
m_ChildAlignment: 0
102+
m_Spacing: 0
103+
m_ChildForceExpandWidth: 1
104+
m_ChildForceExpandHeight: 1
105+
m_ChildControlWidth: 1
106+
m_ChildControlHeight: 1
107+
m_ChildScaleWidth: 0
108+
m_ChildScaleHeight: 0
109+
m_ReverseArrangement: 0
109110
--- !u!1 &8875935558411196948
110111
GameObject:
111112
m_ObjectHideFlags: 0
@@ -134,6 +135,7 @@ RectTransform:
134135
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
135136
m_LocalPosition: {x: 0, y: 0, z: 0}
136137
m_LocalScale: {x: 1, y: 1, z: 1}
138+
m_ConstrainProportionsScale: 0
137139
m_Children: []
138140
m_Father: {fileID: 347657964079713668}
139141
m_RootOrder: 0
@@ -268,6 +270,7 @@ RectTransform:
268270
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
269271
m_LocalPosition: {x: 0, y: 0, z: 0}
270272
m_LocalScale: {x: 1, y: 1, z: 1}
273+
m_ConstrainProportionsScale: 0
271274
m_Children:
272275
- {fileID: 347657964079713668}
273276
m_Father: {fileID: 8875935559098112118}
@@ -306,6 +309,7 @@ RectTransform:
306309
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
307310
m_LocalPosition: {x: 0, y: 0, z: 0}
308311
m_LocalScale: {x: 1, y: 1, z: 1}
312+
m_ConstrainProportionsScale: 0
309313
m_Children: []
310314
m_Father: {fileID: 347657964079713668}
311315
m_RootOrder: 2
@@ -442,6 +446,7 @@ RectTransform:
442446
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
443447
m_LocalPosition: {x: 0, y: 0, z: 0}
444448
m_LocalScale: {x: 1, y: 1, z: 1}
449+
m_ConstrainProportionsScale: 0
445450
m_Children: []
446451
m_Father: {fileID: 347657964079713668}
447452
m_RootOrder: 1
@@ -578,6 +583,7 @@ RectTransform:
578583
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
579584
m_LocalPosition: {x: 0, y: 0, z: 0}
580585
m_LocalScale: {x: 0, y: 0, z: 0}
586+
m_ConstrainProportionsScale: 0
581587
m_Children:
582588
- {fileID: 8875935558490432179}
583589
m_Father: {fileID: 0}
@@ -607,7 +613,7 @@ Canvas:
607613
m_SortingBucketNormalizedSize: 0
608614
m_AdditionalShaderChannelsFlag: 25
609615
m_SortingLayerID: 0
610-
m_SortingOrder: -10
616+
m_SortingOrder: 1000
611617
m_TargetDisplay: 0
612618
--- !u!114 &8875935559098112112
613619
MonoBehaviour:
@@ -661,13 +667,11 @@ MonoBehaviour:
661667
m_Script: {fileID: 11500000, guid: 23c4ae52bafdb47e8b29bc51d0e09092, type: 3}
662668
m_Name:
663669
m_EditorClassIdentifier:
664-
targetFPS: 120
665-
fpsUpdateTime: 500
666-
RAMUpdateTime: 1
667670
fpsText: {fileID: 8875935558411196954}
668671
allocatedRamText: {fileID: 8875935558876371608}
669672
reservedRamText: {fileID: 8875935558695309443}
670673
monoRamText: {fileID: 8875935560091874572}
674+
canvas: {fileID: 8875935559098112119}
671675
--- !u!1 &8875935560091874574
672676
GameObject:
673677
m_ObjectHideFlags: 0
@@ -696,6 +700,7 @@ RectTransform:
696700
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
697701
m_LocalPosition: {x: 0, y: 0, z: 0}
698702
m_LocalScale: {x: 1, y: 1, z: 1}
703+
m_ConstrainProportionsScale: 0
699704
m_Children: []
700705
m_Father: {fileID: 347657964079713668}
701706
m_RootOrder: 3

Runtime/RSMCore.cs

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,51 @@
55

66
namespace RightStatsMonitor.Core
77
{
8-
public class RSMCore : MonoBehaviour
8+
public sealed class RSMCore : MonoBehaviour
99
{
10-
public int targetFPS = 120;
11-
[Tooltip("in milliseconds")] public long fpsUpdateTime = 500;
12-
[Tooltip("in seconds")] public float RAMUpdateTime = 1f;
13-
public TMP_Text fpsText, allocatedRamText, reservedRamText, monoRamText;
14-
1510
public static float CurrentFPS { get; private set; }
16-
11+
12+
public TMP_Text fpsText;
13+
public TMP_Text allocatedRamText;
14+
public TMP_Text reservedRamText;
15+
public TMP_Text monoRamText;
16+
17+
[SerializeField] private Canvas canvas;
18+
19+
private RsmSettings _rsmSettings;
1720
private Stopwatch _stopwatch;
18-
21+
22+
private int _targetFPS;
23+
private long _fpsUpdateTime;
24+
private float _ramUpdateTime;
25+
1926
private int _passedFrames;
2027
private long _passedMilliseconds;
21-
private float _passedSeconds, _currentFrameTime, _timeCount = 1f;
22-
28+
private float _passedSeconds;
29+
private float _currentFrameTime;
30+
private float _timeCount = 1f;
2331

2432
private void Start()
2533
{
34+
_rsmSettings = RsmSettings.Instance;
35+
36+
if (_rsmSettings.DontDestroy) DontDestroyOnLoad(this);
37+
38+
canvas.sortingOrder = _rsmSettings.CanvasSortOrder;
39+
40+
_targetFPS = _rsmSettings.TargetFrameRate;
41+
_fpsUpdateTime = _rsmSettings.FpsUpdateTime;
42+
_ramUpdateTime = _rsmSettings.RamUpdateTime;
43+
2644
QualitySettings.vSyncCount = 0;
27-
Application.targetFrameRate = targetFPS;
45+
Application.targetFrameRate = _targetFPS;
2846

2947
_stopwatch = Stopwatch.StartNew();
3048
}
3149

3250
private void Update()
3351
{
34-
if (_timeCount >= RAMUpdateTime)
52+
if (_timeCount >= _ramUpdateTime)
3553
{
3654
_timeCount = 0f;
3755
allocatedRamText.SetText("Allocated: {0:1}", Profiler.GetTotalAllocatedMemoryLong()/ 1048576f);
@@ -48,12 +66,12 @@ private void Update()
4866

4967
_passedMilliseconds = _stopwatch.ElapsedMilliseconds;
5068

51-
if (_passedMilliseconds < fpsUpdateTime) return;
69+
if (_passedMilliseconds < _fpsUpdateTime) return;
5270

5371
_passedSeconds = _passedMilliseconds / 1000f;
5472

5573
CurrentFPS = _passedFrames / _passedSeconds;
56-
_currentFrameTime = _passedMilliseconds / (float)_passedFrames;
74+
_currentFrameTime = _passedMilliseconds / (_passedFrames * 1f); // `*1f` instead of explicit conversion
5775

5876
fpsText.SetText("FPS: {0:1} (ms {1:1})", CurrentFPS, _currentFrameTime);
5977

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using UnityEngine;
2+
3+
namespace RightStatsMonitor.Core
4+
{
5+
internal static class RsmInitializationProcessor
6+
{
7+
[RuntimeInitializeOnLoadMethod]
8+
private static void InitializationProcessor()
9+
{
10+
var settings = RsmSettings.Instance;
11+
12+
if (settings.InitializeAtRuntime)
13+
{
14+
if (GameObject.FindObjectsOfType<RSMCore>().Length > 1)
15+
{
16+
Debug.Log("RSM is already added to scene");
17+
return;
18+
}
19+
GameObject.Instantiate(Resources.Load("RightStatsMonitor")).name = "RSM";
20+
}
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)