Skip to content

Commit a0adc99

Browse files
authored
Merge pull request #173 from Unity-Technologies/categorical-parameter-fixes
Fixed and polished a few Randomization UI elements
2 parents e582536 + f268af8 commit a0adc99

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+637
-520
lines changed

com.unity.perception/CHANGELOG.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ Added new capture options to Perception Camera:
3131
* Can now render intermediate frames between captures.
3232
* Capture can now be triggered manually using a function call, instead of automatic capturing on a schedule.
3333

34+
Categorical Parameters will now validate that their specified options are unique at runtime.
35+
3436
### Changed
3537

36-
Randomizers now access their parent scenario through the static activeScenario property
38+
Randomizers now access their parent scenario through the static activeScenario property.
3739

3840
Unique seeds per Sampler have been replaced with one global random seed configured via the ScenarioConstants of a Scenario
3941

@@ -47,8 +49,9 @@ ScenarioBase.Serialize() now not only serializes scenario constants, but also al
4749

4850
RandomizerTagManager.Query<T>() now returns RandomizerTags directly instead of the GameObjects attached to said tags
4951

50-
Semantic Segmentation Labeler now places data in folders with randomized filenames
52+
Semantic Segmentation Labeler now places data in folders with randomized filenames.
5153

54+
The uniform toggle on Categorical Parameters will now reset the Parameter's probability weights to be uniform.
5255

5356
### Deprecated
5457

@@ -76,8 +79,11 @@ Fixed a bug where removing all randomizers from a scenario caused the randomizer
7679

7780
Semantic Segmentation Labeler now produces output in the proper form for distributed data generation on Unity Simulation by placing output in randomized directory names
7881

79-
Texture Randomizer is now compatible with HDRP
82+
Texture Randomizer is now compatible with HDRP.
83+
84+
Categorical Parameters no longer produce errors when deleting items from long options lists.
8085

86+
Parameter, ISampler, and non-generic Sampler class UIs now render properly in MonoBehaviours and ScriptableObjects.
8187

8288
## [0.6.0-preview.1] - 2020-12-03
8389

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,37 @@
11
using System;
22
using JetBrains.Annotations;
3-
using UnityEditor;
43
using UnityEngine.Analytics;
54

6-
namespace UnityEngine.Perception.Randomization.Editor
5+
namespace UnityEditor.Experimental.Perception.Randomization
76
{
87
static class PerceptionEditorAnalytics
98
{
10-
static int k_MaxItems = 100;
11-
static int k_MaxEventsPerHour = 100;
129
const string k_VendorKey = "unity.perception";
1310
const string k_RunInUnitySimulationName = "runinunitysimulation";
11+
static int k_MaxItems = 100;
12+
static int k_MaxEventsPerHour = 100;
1413

15-
static bool s_IsRegistered = false;
14+
static bool s_IsRegistered;
1615

1716
static bool TryRegisterEvents()
1817
{
1918
if (s_IsRegistered)
2019
return true;
2120

22-
bool success = true;
21+
var success = true;
2322
success &= EditorAnalytics.RegisterEventWithLimit(k_RunInUnitySimulationName, k_MaxEventsPerHour, k_MaxItems,
2423
k_VendorKey) == AnalyticsResult.Ok;
2524

2625
s_IsRegistered = success;
2726
return success;
2827
}
2928

30-
enum RunStatus
31-
{
32-
Started,
33-
Failed,
34-
Succeeded
35-
}
36-
37-
struct RunInUnitySimulationData
38-
{
39-
[UsedImplicitly]
40-
public string runId;
41-
[UsedImplicitly]
42-
public int totalIterations;
43-
[UsedImplicitly]
44-
public int instanceCount;
45-
[UsedImplicitly]
46-
public string existingBuildId;
47-
[UsedImplicitly]
48-
public string errorMessage;
49-
[UsedImplicitly]
50-
public string runExecutionId;
51-
[UsedImplicitly]
52-
public string runStatus;
53-
}
54-
5529
public static void ReportRunInUnitySimulationStarted(Guid runId, int totalIterations, int instanceCount, string existingBuildId)
5630
{
5731
if (!TryRegisterEvents())
5832
return;
5933

60-
var data = new RunInUnitySimulationData()
34+
var data = new RunInUnitySimulationData
6135
{
6236
runId = runId.ToString(),
6337
totalIterations = totalIterations,
@@ -73,7 +47,7 @@ public static void ReportRunInUnitySimulationFailed(Guid runId, string errorMess
7347
if (!TryRegisterEvents())
7448
return;
7549

76-
var data = new RunInUnitySimulationData()
50+
var data = new RunInUnitySimulationData
7751
{
7852
runId = runId.ToString(),
7953
errorMessage = errorMessage,
@@ -87,13 +61,38 @@ public static void ReportRunInUnitySimulationSucceeded(Guid runId, string runExe
8761
if (!TryRegisterEvents())
8862
return;
8963

90-
var data = new RunInUnitySimulationData()
64+
var data = new RunInUnitySimulationData
9165
{
9266
runId = runId.ToString(),
9367
runExecutionId = runExecutionId,
9468
runStatus = RunStatus.Succeeded.ToString()
9569
};
9670
EditorAnalytics.SendEventWithLimit(k_RunInUnitySimulationName, data);
9771
}
72+
73+
enum RunStatus
74+
{
75+
Started,
76+
Failed,
77+
Succeeded
78+
}
79+
80+
struct RunInUnitySimulationData
81+
{
82+
[UsedImplicitly]
83+
public string runId;
84+
[UsedImplicitly]
85+
public int totalIterations;
86+
[UsedImplicitly]
87+
public int instanceCount;
88+
[UsedImplicitly]
89+
public string existingBuildId;
90+
[UsedImplicitly]
91+
public string errorMessage;
92+
[UsedImplicitly]
93+
public string runExecutionId;
94+
[UsedImplicitly]
95+
public string runStatus;
96+
}
9897
}
9998
}

com.unity.perception/Editor/Randomization/Editors/RunInUnitySimulationWindow.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,30 @@
66
using Newtonsoft.Json;
77
using Newtonsoft.Json.Linq;
88
using Unity.Simulation.Client;
9-
using UnityEditor;
109
using UnityEditor.Build.Reporting;
1110
using UnityEditor.UIElements;
12-
using UnityEngine.Experimental.Perception.Randomization.Editor;
11+
using UnityEngine;
1312
using UnityEngine.Experimental.Perception.Randomization.Scenarios;
1413
using UnityEngine.SceneManagement;
1514
using UnityEngine.UIElements;
1615
using ZipUtility;
1716

18-
namespace UnityEngine.Perception.Randomization.Editor
17+
namespace UnityEditor.Experimental.Perception.Randomization
1918
{
2019
class RunInUnitySimulationWindow : EditorWindow
2120
{
2221
string m_BuildDirectory;
2322

2423
string m_BuildZipPath;
25-
SysParamDefinition m_SysParam;
26-
27-
TextField m_RunNameField;
28-
IntegerField m_TotalIterationsField;
2924
IntegerField m_InstanceCountField;
3025
ObjectField m_MainSceneField;
31-
ObjectField m_ScenarioField;
3226
Button m_RunButton;
3327

28+
TextField m_RunNameField;
29+
ObjectField m_ScenarioField;
30+
SysParamDefinition m_SysParam;
31+
IntegerField m_TotalIterationsField;
32+
3433
[MenuItem("Window/Run in Unity Simulation")]
3534
static void ShowWindow()
3635
{
@@ -81,7 +80,7 @@ void CreateEstablishingConnectionUI(Project.State state)
8180
}
8281

8382
/// <summary>
84-
/// Enables a visual element to remember values between editor sessions
83+
/// Enables a visual element to remember values between editor sessions
8584
/// </summary>
8685
/// <param name="element">The visual element to enable view data for</param>
8786
static void SetViewDataKey(VisualElement element)
@@ -120,15 +119,13 @@ void CreateRunInUnitySimulationUI()
120119
var sysParamDefinitions = API.GetSysParams();
121120
var sysParamMenu = root.Q<ToolbarMenu>("sys-param");
122121
foreach (var definition in sysParamDefinitions)
123-
{
124122
sysParamMenu.menu.AppendAction(
125123
definition.description,
126124
action =>
127125
{
128126
m_SysParam = definition;
129127
sysParamMenu.text = definition.description;
130128
});
131-
}
132129

133130
sysParamMenu.text = sysParamDefinitions[0].description;
134131
m_SysParam = sysParamDefinitions[0];
@@ -144,7 +141,7 @@ async void RunInUnitySimulation()
144141
runGuid,
145142
m_TotalIterationsField.value,
146143
m_InstanceCountField.value,
147-
existingBuildId: null);
144+
null);
148145
try
149146
{
150147
ValidateSettings();
@@ -222,14 +219,17 @@ List<AppParam> GenerateAppParamIds(CancellationToken token, float progressStart,
222219

223220
var appParamsString = JsonConvert.SerializeObject(configuration, Formatting.Indented);
224221
var appParamId = API.UploadAppParam(appParamName, appParamsString);
225-
appParamIds.Add(new AppParam()
222+
appParamIds.Add(new AppParam
226223
{
227224
id = appParamId,
228225
name = appParamName,
229226
num_instances = 1
230227
});
231228

232-
EditorUtility.DisplayProgressBar("Unity Simulation Run", $"Uploading app-param-ids for instances: {i + 1}/{m_InstanceCountField.value}", progressStart + progressIncrement * i);
229+
EditorUtility.DisplayProgressBar(
230+
"Unity Simulation Run",
231+
$"Uploading app-param-ids for instances: {i + 1}/{m_InstanceCountField.value}",
232+
progressStart + progressIncrement * i);
233233
}
234234

235235
return appParamIds;
@@ -260,7 +260,7 @@ async Task StartUnitySimulationRun(Guid runGuid)
260260

261261
Debug.Log($"Generated app-param ids: {appParams.Count}");
262262

263-
EditorUtility.DisplayProgressBar("Unity Simulation Run", $"Uploading run definition...", 0.9f);
263+
EditorUtility.DisplayProgressBar("Unity Simulation Run", "Uploading run definition...", 0.9f);
264264

265265
var runDefinitionId = API.UploadRunDefinition(new RunDefinition
266266
{
@@ -271,7 +271,7 @@ async Task StartUnitySimulationRun(Guid runGuid)
271271
});
272272
Debug.Log($"Run definition upload complete: run definition id {runDefinitionId}");
273273

274-
EditorUtility.DisplayProgressBar("Unity Simulation Run", $"Executing run...", 0.95f);
274+
EditorUtility.DisplayProgressBar("Unity Simulation Run", "Executing run...", 0.95f);
275275

276276
var run = Run.CreateFromDefinitionId(runDefinitionId);
277277
run.Execute();
Lines changed: 28 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
1-
using System.Collections;
2-
using System.Linq;
3-
using UnityEditor;
4-
using UnityEditor.UIElements;
1+
using UnityEngine;
52
using UnityEngine.Experimental.Perception.Randomization.Scenarios;
6-
using UnityEngine.Experimental.Perception.Randomization.VisualElements;
73
using UnityEngine.UIElements;
4+
using Object = UnityEngine.Object;
85

9-
namespace UnityEngine.Experimental.Perception.Randomization.Editor
6+
namespace UnityEditor.Experimental.Perception.Randomization
107
{
118
[CustomEditor(typeof(ScenarioBase), true)]
12-
class ScenarioBaseEditor : UnityEditor.Editor
9+
class ScenarioBaseEditor : Editor
1310
{
11+
VisualElement m_ConstantsListVisualContainer;
1412
bool m_HasConstantsField;
15-
ScenarioBase m_Scenario;
16-
SerializedObject m_SerializedObject;
17-
VisualElement m_Root;
1813
VisualElement m_InspectorPropertiesContainer;
19-
VisualElement m_ConstantsListVisualContainer;
2014
VisualElement m_RandomizerListPlaceholder;
15+
VisualElement m_Root;
16+
ScenarioBase m_Scenario;
17+
SerializedObject m_SerializedObject;
2118

2219
public override VisualElement CreateInspectorGUI()
2320
{
@@ -58,35 +55,32 @@ void CreatePropertyFields()
5855
m_ConstantsListVisualContainer = m_Root.Q<VisualElement>("constants-list");
5956
m_ConstantsListVisualContainer.Clear();
6057

61-
var iterator = m_SerializedObject.GetIterator();
6258
var foundProperties = false;
6359
m_HasConstantsField = false;
64-
if (iterator.NextVisible(true))
60+
61+
var iterator = m_SerializedObject.GetIterator();
62+
iterator.NextVisible(true);
63+
iterator.NextVisible(false);
64+
do
6565
{
66-
do
66+
switch (iterator.name)
6767
{
68-
switch (iterator.name)
68+
case "m_Randomizers":
69+
m_RandomizerListPlaceholder.Add(new RandomizerList(iterator.Copy()));
70+
break;
71+
case "constants":
72+
m_HasConstantsField = true;
73+
UIElementsEditorUtilities.CreatePropertyFields(iterator.Copy(), m_ConstantsListVisualContainer);
74+
break;
75+
default:
6976
{
70-
case "m_Script":
71-
break;
72-
case "m_Randomizers":
73-
m_RandomizerListPlaceholder.Add(new RandomizerList(iterator.Copy()));
74-
break;
75-
case "constants":
76-
m_HasConstantsField = true;
77-
CreateConstantsFieldsWithToolTips(iterator.Copy());
78-
break;
79-
default:
80-
{
81-
foundProperties = true;
82-
var propertyField = new PropertyField(iterator.Copy());
83-
propertyField.Bind(m_SerializedObject);
84-
m_InspectorPropertiesContainer.Add(propertyField);
85-
break;
86-
}
77+
foundProperties = true;
78+
var propertyField = UIElementsEditorUtilities.CreatePropertyField(iterator, m_Scenario.GetType());
79+
m_InspectorPropertiesContainer.Add(propertyField);
80+
break;
8781
}
88-
} while (iterator.NextVisible(false));
89-
}
82+
}
83+
} while (iterator.NextVisible(false));
9084

9185
if (!foundProperties)
9286
m_InspectorPropertiesContainer.style.display = new StyleEnum<DisplayStyle>(DisplayStyle.None);
@@ -101,23 +95,5 @@ void CheckIfConstantsExist()
10195
m_ConstantsListVisualContainer.style.display = new StyleEnum<DisplayStyle>(DisplayStyle.None);
10296
}
10397
}
104-
105-
void CreateConstantsFieldsWithToolTips(SerializedProperty constantsProperty)
106-
{
107-
constantsProperty.NextVisible(true);
108-
do
109-
{
110-
var constantsPropertyField = new PropertyField(constantsProperty.Copy());
111-
constantsPropertyField.Bind(m_SerializedObject);
112-
113-
var originalField = target.GetType().GetField("constants").FieldType.GetField(constantsProperty.name);
114-
var tooltipAttribute = originalField.GetCustomAttributes(true).ToList().Find(att => att.GetType() == typeof(TooltipAttribute));
115-
if (tooltipAttribute != null)
116-
constantsPropertyField.tooltip = (tooltipAttribute as TooltipAttribute)?.tooltip;
117-
118-
m_ConstantsListVisualContainer.Add(constantsPropertyField);
119-
120-
} while (constantsProperty.NextVisible(true));
121-
}
12298
}
12399
}

com.unity.perception/Editor/Randomization/PropertyDrawers/ColorHsvaDrawer.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
using UnityEditor;
1+
using System;
2+
using UnityEngine;
23
using UnityEngine.Experimental.Perception.Randomization.Parameters;
34
using UnityEngine.UIElements;
45

5-
namespace UnityEngine.Perception.Randomization.Editor.PropertyDrawers
6+
namespace UnityEditor.Experimental.Perception.Randomization.PropertyDrawers
67
{
78
[CustomPropertyDrawer(typeof(ColorHsva), true)]
89
class ColorHsvaDrawer : PropertyDrawer

0 commit comments

Comments
 (0)