in PC Holographic Remoting/Assets/MRTK/Core/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs [66:321]
protected override void OnEnable()
{
base.OnEnable();
if (target == null)
{
// Either when we are recompiling, or the inspector window is hidden behind another one, the target can get destroyed (null) and thereby will raise an ArgumentException when accessing serializedObject. For now, just return.
return;
}
MixedRealityToolkitConfigurationProfile mrtkConfigProfile = target as MixedRealityToolkitConfigurationProfile;
// Experience configuration
targetExperienceScale = serializedObject.FindProperty("targetExperienceScale");
// Camera configuration
enableCameraSystem = serializedObject.FindProperty("enableCameraSystem");
cameraSystemType = serializedObject.FindProperty("cameraSystemType");
cameraProfile = serializedObject.FindProperty("cameraProfile");
// Input system configuration
enableInputSystem = serializedObject.FindProperty("enableInputSystem");
inputSystemType = serializedObject.FindProperty("inputSystemType");
inputSystemProfile = serializedObject.FindProperty("inputSystemProfile");
// Boundary system configuration
enableBoundarySystem = serializedObject.FindProperty("enableBoundarySystem");
boundarySystemType = serializedObject.FindProperty("boundarySystemType");
boundaryVisualizationProfile = serializedObject.FindProperty("boundaryVisualizationProfile");
// Teleport system configuration
enableTeleportSystem = serializedObject.FindProperty("enableTeleportSystem");
teleportSystemType = serializedObject.FindProperty("teleportSystemType");
// Spatial Awareness system configuration
enableSpatialAwarenessSystem = serializedObject.FindProperty("enableSpatialAwarenessSystem");
spatialAwarenessSystemType = serializedObject.FindProperty("spatialAwarenessSystemType");
spatialAwarenessSystemProfile = serializedObject.FindProperty("spatialAwarenessSystemProfile");
// Diagnostics system configuration
enableDiagnosticsSystem = serializedObject.FindProperty("enableDiagnosticsSystem");
diagnosticsSystemType = serializedObject.FindProperty("diagnosticsSystemType");
diagnosticsSystemProfile = serializedObject.FindProperty("diagnosticsSystemProfile");
// Scene system configuration
enableSceneSystem = serializedObject.FindProperty("enableSceneSystem");
sceneSystemType = serializedObject.FindProperty("sceneSystemType");
sceneSystemProfile = serializedObject.FindProperty("sceneSystemProfile");
// Additional registered components configuration
registeredServiceProvidersProfile = serializedObject.FindProperty("registeredServiceProvidersProfile");
// Editor settings
useServiceInspectors = serializedObject.FindProperty("useServiceInspectors");
renderDepthBuffer = serializedObject.FindProperty("renderDepthBuffer");
SelectedProfileTab = SessionState.GetInt(SelectedTabPreferenceKey, SelectedProfileTab);
if (RenderProfileFuncs == null)
{
RenderProfileFuncs = new Func<bool>[]
{
() => {
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableCameraSystem);
const string service = "Camera System";
if (enableCameraSystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.CameraSystemType, mrtkConfigProfile.CameraProfile != null);
EditorGUILayout.PropertyField(cameraSystemType);
changed |= RenderProfile(cameraProfile, typeof(MixedRealityCameraProfile), true, false);
}
else
{
RenderSystemDisabled(service);
}
changed |= c.changed;
}
return changed;
},
() => {
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableInputSystem);
const string service = "Input System";
if (enableInputSystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.InputSystemType, mrtkConfigProfile.InputSystemProfile != null);
EditorGUILayout.PropertyField(inputSystemType);
changed |= RenderProfile(inputSystemProfile, null, true, false, typeof(IMixedRealityInputSystem));
}
else
{
RenderSystemDisabled(service);
}
changed |= c.changed;
}
return changed;
},
() => {
var experienceScale = (ExperienceScale)targetExperienceScale.intValue;
if (experienceScale != ExperienceScale.Room)
{
// Alert the user if the experience scale does not support boundary features.
GUILayout.Space(6f);
EditorGUILayout.HelpBox("Boundaries are only supported in Room scale experiences.", MessageType.Warning);
GUILayout.Space(6f);
}
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableBoundarySystem);
const string service = "Boundary System";
if (enableBoundarySystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.BoundarySystemSystemType, mrtkConfigProfile.BoundaryVisualizationProfile != null);
EditorGUILayout.PropertyField(boundarySystemType);
changed |= RenderProfile(boundaryVisualizationProfile, null, true, false, typeof(IMixedRealityBoundarySystem));
}
else
{
RenderSystemDisabled(service);
}
changed |= c.changed;
}
return changed;
},
() => {
const string service = "Teleport System";
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableTeleportSystem);
if (enableTeleportSystem.boolValue)
{
// Teleport System does not have a profile scriptableobject so auto to true
CheckSystemConfiguration(service, mrtkConfigProfile.TeleportSystemSystemType,true);
EditorGUILayout.PropertyField(teleportSystemType);
}
else
{
RenderSystemDisabled(service);
}
return c.changed;
}
},
() => {
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
const string service = "Spatial Awareness System";
EditorGUILayout.PropertyField(enableSpatialAwarenessSystem);
if (enableSpatialAwarenessSystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.SpatialAwarenessSystemSystemType, mrtkConfigProfile.SpatialAwarenessSystemProfile != null);
EditorGUILayout.PropertyField(spatialAwarenessSystemType);
EditorGUILayout.HelpBox("Spatial Awareness settings are configured per observer.", MessageType.Info);
changed |= RenderProfile(spatialAwarenessSystemProfile, null, true, false, typeof(IMixedRealitySpatialAwarenessSystem));
}
else
{
RenderSystemDisabled(service);
}
changed |= c.changed;
}
return changed;
},
() => {
EditorGUILayout.HelpBox("It is recommended to enable the Diagnostics system during development. Be sure to disable prior to building your shipping product.", MessageType.Warning);
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableDiagnosticsSystem);
const string service = "Diagnostics System";
if (enableDiagnosticsSystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.DiagnosticsSystemSystemType, mrtkConfigProfile.DiagnosticsSystemProfile != null);
EditorGUILayout.PropertyField(diagnosticsSystemType);
changed |= RenderProfile(diagnosticsSystemProfile, typeof(MixedRealityDiagnosticsProfile));
}
else
{
RenderSystemDisabled(service);
}
changed |= c.changed;
}
return changed;
},
() => {
bool changed = false;
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(enableSceneSystem);
const string service = "Scene System";
if (enableSceneSystem.boolValue)
{
CheckSystemConfiguration(service, mrtkConfigProfile.SceneSystemSystemType, mrtkConfigProfile.SceneSystemProfile != null);
EditorGUILayout.PropertyField(sceneSystemType);
changed |= RenderProfile(sceneSystemProfile, typeof(MixedRealitySceneSystemProfile), true, true, typeof(IMixedRealitySceneSystem));
}
changed |= c.changed;
}
return changed;
},
() => {
return RenderProfile(registeredServiceProvidersProfile, typeof(MixedRealityRegisteredServiceProvidersProfile), true, false);
},
() => {
EditorGUILayout.PropertyField(useServiceInspectors);
using (var c = new EditorGUI.ChangeCheckScope())
{
EditorGUILayout.PropertyField(renderDepthBuffer);
if (c.changed)
{
if (renderDepthBuffer.boolValue)
{
CameraCache.Main.gameObject.AddComponent<DepthBufferRenderer>();
}
else
{
foreach (var dbr in FindObjectsOfType<DepthBufferRenderer>())
{
UnityObjectExtensions.DestroyObject(dbr);
}
}
}
}
return false;
},
};
}
}