Skip to content

Commit 6c041ac

Browse files
authored
Added Unit Attribute and Sample Usage (#181)
1 parent f1bffc8 commit 6c041ac

File tree

7 files changed

+242
-0
lines changed

7 files changed

+242
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using TriInspector;
2+
using TriInspector.Drawers;
3+
using UnityEditor;
4+
using UnityEngine;
5+
6+
[assembly: RegisterTriAttributeDrawer(typeof(UnitDrawer), TriDrawerOrder.Decorator)]
7+
8+
namespace TriInspector.Drawers
9+
{
10+
public class UnitDrawer : TriAttributeDrawer<UnitAttribute>
11+
{
12+
/// <summary>
13+
/// Defines the padding to the right of the unit label towards the editable input field
14+
/// </summary>
15+
private const int paddingRight = 5;
16+
private GUIStyle unitStyle;
17+
private GUIContent content;
18+
19+
public override void OnGUI(Rect position, TriProperty property, TriElement next)
20+
{
21+
if(unitStyle == null){
22+
unitStyle = new(EditorStyles.label);
23+
}
24+
25+
if(content == null){
26+
content = new(Attribute.unitToDisplay);
27+
}
28+
29+
Vector2 size = unitStyle.CalcSize(content);
30+
31+
var unitRect = new Rect(position.xMax - size.x - paddingRight, position.y, size.x, position.height);
32+
33+
// Render the editable input field
34+
next.OnGUI(position);
35+
36+
//Change color to grey
37+
var tmpColor = GUI.color;
38+
GUI.color = Color.grey;
39+
// Render the unit as a suffix in the unitRect
40+
EditorGUI.LabelField(unitRect, content);
41+
// Restore the original color
42+
GUI.color = tmpColor;
43+
}
44+
}
45+
}

Editor.Extras/Drawers/UnitDrawer.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
using System.Collections.Generic;
2+
using TriInspector;
3+
using UnityEngine;
4+
5+
public class Decorators_UnitSample : ScriptableObject
6+
{
7+
[Unit("My custom Unit")]
8+
public float freeTextUnit;
9+
10+
[Unit(UnitAttribute.Meter)]
11+
public float lengthInMeters;
12+
13+
[Unit(UnitAttribute.Centimeter)]
14+
public float lengthInCentimeters;
15+
16+
[Unit(UnitAttribute.Millimeter)]
17+
public float lengthInMillimeters;
18+
19+
[Unit(UnitAttribute.Kilogram)]
20+
public float massInKilograms;
21+
22+
[Unit(UnitAttribute.Gram)]
23+
public float massInGrams;
24+
25+
[Unit(UnitAttribute.Second)]
26+
public float timeInSeconds;
27+
28+
[Unit(UnitAttribute.Ampere)]
29+
public float electricCurrentInAmperes;
30+
31+
[Unit(UnitAttribute.Kelvin)]
32+
public float temperatureInKelvins;
33+
34+
[Unit(UnitAttribute.Celsius)]
35+
public float temperatureInCelsius;
36+
37+
[Unit(UnitAttribute.Mole)]
38+
public float amountOfSubstanceInMoles;
39+
40+
[Unit(UnitAttribute.Candela)]
41+
public float luminousIntensityInCandelas;
42+
43+
[Unit(UnitAttribute.Radian)]
44+
public float angleInRadians;
45+
46+
[Unit(UnitAttribute.Degree)]
47+
public float angleInDegrees;
48+
49+
[Unit(UnitAttribute.Liter)]
50+
public float volumeInLiters;
51+
52+
[Unit(UnitAttribute.Hertz)]
53+
public float frequencyInHertz;
54+
55+
[Unit(UnitAttribute.Newton)]
56+
public float forceInNewtons;
57+
58+
[Unit(UnitAttribute.Pascal)]
59+
public float pressureInPascals;
60+
61+
[Unit(UnitAttribute.Joule)]
62+
public float energyInJoules;
63+
64+
[Unit(UnitAttribute.Watt)]
65+
public float powerInWatts;
66+
67+
[Unit(UnitAttribute.Coulomb)]
68+
public float electricChargeInCoulombs;
69+
70+
[Unit(UnitAttribute.Volt)]
71+
public float electricPotentialInVolts;
72+
73+
[Unit(UnitAttribute.Ohm)]
74+
public float resistanceInOhms;
75+
76+
[Unit(UnitAttribute.Farad)]
77+
public float capacitanceInFarads;
78+
79+
[Unit(UnitAttribute.Tesla)]
80+
public float magneticFluxDensityInTeslas;
81+
82+
[Unit(UnitAttribute.Lux)]
83+
public float illuminanceInLux;
84+
85+
[Unit(UnitAttribute.Weber)]
86+
public float magneticFluxInWebers;
87+
88+
[Unit(UnitAttribute.Sievert)]
89+
public float doseEquivalentInSieverts;
90+
91+
[Unit(UnitAttribute.Henry)]
92+
public float inductanceInHenrys;
93+
94+
[Unit(UnitAttribute.Siemens)]
95+
public float conductanceInSiemens;
96+
97+
[Unit(UnitAttribute.Becquerel)]
98+
public float radioactivityInBecquerels;
99+
100+
[Unit(UnitAttribute.Gray)]
101+
public float absorbedDoseInGrays;
102+
103+
[Unit(UnitAttribute.Katal)]
104+
public float catalyticActivityInKatals;
105+
106+
[Unit(UnitAttribute.MeterPerSecond)]
107+
public float speedInMetersPerSecond;
108+
109+
[Unit(UnitAttribute.MeterPerSquareSecond)]
110+
public float accelerationInMetersPerSquareSecond;
111+
}

Editor.Samples/Decorators/Decorators_UnitSample.cs.meta

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

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,24 @@ public Material mat;
276276
public string[] collection = {"hello", "world"};
277277
```
278278

279+
#### Unit
280+
281+
![Unit](https://github.com/user-attachments/assets/7b40aa28-cb5f-4764-9ec1-19ed95b12803)
282+
283+
```csharp
284+
[Unit("My custom Unit")]
285+
public float freeTextUnit;
286+
287+
[Unit(UnitAttribute.Meter)]
288+
public float lengthInMeters;
289+
290+
[Unit(UnitAttribute.Centimeter)]
291+
public float lengthInCentimeters;
292+
293+
[Unit(UnitAttribute.Millimeter)]
294+
public float lengthInMillimeters;
295+
```
296+
279297
### Styling
280298

281299
#### Title
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System;
2+
using System.Diagnostics;
3+
4+
namespace TriInspector
5+
{
6+
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
7+
[Conditional("UNITY_EDITOR")]
8+
public class UnitAttribute : Attribute
9+
{
10+
public string unitToDisplay;
11+
12+
#region Base Units
13+
public const string Meter = "m";
14+
public const string Centimeter = "cm";
15+
public const string Millimeter = "mm";
16+
public const string Kilogram = "kg";
17+
public const string Second = "s";
18+
public const string Ampere = "A";
19+
public const string Kelvin = "K";
20+
public const string Mole = "mol";
21+
public const string Candela = "cd";
22+
#endregion
23+
24+
#region Derived Units
25+
public const string Radian = "rad";
26+
public const string Degree = "°";
27+
public const string Gram = "g";
28+
public const string Liter = "L";
29+
public const string Hertz = "Hz";
30+
public const string Newton = "N";
31+
public const string Pascal = "Pa";
32+
public const string Joule = "J";
33+
public const string Watt = "W";
34+
public const string Coulomb = "C";
35+
public const string Volt = "V";
36+
public const string Ohm = "Ω";
37+
public const string Farad = "F";
38+
public const string Tesla = "T";
39+
public const string Celsius = "°C";
40+
#endregion
41+
42+
#region Common Combinations
43+
public const string MeterPerSecond = "m/s";
44+
public const string MeterPerSquareSecond = "m/s²";
45+
#endregion
46+
47+
#region Extended Physics Units
48+
public const string Lux = "lx";
49+
public const string Weber = "Wb";
50+
public const string Sievert = "Sv";
51+
public const string Henry = "H";
52+
public const string Siemens = "S";
53+
public const string Becquerel = "Bq";
54+
public const string Gray = "Gy";
55+
public const string Katal = "kat";
56+
#endregion
57+
58+
public UnitAttribute(string unit){
59+
unitToDisplay = unit;
60+
}
61+
}
62+
}

Runtime/Attributes/Decorators/UnitAttribute.cs.meta

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

0 commit comments

Comments
 (0)