private static void EditCustomSettingsProperties()
        {
            GameObject prefab          = Resources.Load <GameObject>(SpectatorView.SettingsPrefabName);
            GameObject hierarchyPrefab = null;

            if (prefab == null)
            {
                hierarchyPrefab = new GameObject(SpectatorView.SettingsPrefabName);
                hierarchyPrefab.AddComponent <BroadcasterSettings>();
                hierarchyPrefab.AddComponent <SpatialLocalizationInitializationSettings>();
                hierarchyPrefab.AddComponent <MobileRecordingSettings>();
                hierarchyPrefab.AddComponent <NetworkConfigurationSettings>();

                prefab = PrefabUtility.SaveAsPrefabAsset(hierarchyPrefab, SpectatorViewSettings.GetSettingsPath(SpectatorView.SettingsPrefabName, ".prefab"));
                Object.DestroyImmediate(hierarchyPrefab);
            }
            else
            {
                GameObject editablePrefab = PrefabUtility.LoadPrefabContents(SpectatorViewSettings.GetSettingsPath(SpectatorView.SettingsPrefabName, ".prefab"));
                EnsureComponent <BroadcasterSettings>(editablePrefab);
                EnsureComponent <SpatialLocalizationInitializationSettings>(editablePrefab);
                EnsureComponent <MobileRecordingSettings>(editablePrefab);
                EnsureComponent <NetworkConfigurationSettings>(editablePrefab);
                PrefabUtility.SaveAsPrefabAsset(editablePrefab, SpectatorViewSettings.GetSettingsPath(SpectatorView.SettingsPrefabName, ".prefab"));
                PrefabUtility.UnloadPrefabContents(editablePrefab);
            }

            AssetDatabase.OpenAsset(prefab);
        }
        private static void EditCustomShaderProperties()
        {
            GameObject prefab = Resources.Load <GameObject>(StateSynchronizationSceneManager.CustomBroadcasterServicesPrefabName);

            if (prefab == null)
            {
                GameObject hierarchyPrefab = new GameObject(StateSynchronizationSceneManager.CustomBroadcasterServicesPrefabName);

                prefab = PrefabUtility.SaveAsPrefabAsset(hierarchyPrefab, SpectatorViewSettings.GetSettingsPath(StateSynchronizationSceneManager.CustomBroadcasterServicesPrefabName, ".prefab"));
                Object.DestroyImmediate(hierarchyPrefab);
            }

            AssetDatabase.OpenAsset(prefab);
        }
        internal static void EditGlobalPerformanceParameters()
        {
            GameObject prefab = Resources.Load <GameObject>(StateSynchronizationSceneManager.DefaultStateSynchronizationPerformanceParametersPrefabName);

            if (prefab == null)
            {
                GameObject hierarchyPrefab = new GameObject(StateSynchronizationSceneManager.DefaultStateSynchronizationPerformanceParametersPrefabName);
                hierarchyPrefab.AddComponent <DefaultStateSynchronizationPerformanceParameters>();

                prefab = PrefabUtility.SaveAsPrefabAsset(hierarchyPrefab, SpectatorViewSettings.GetSettingsPath(StateSynchronizationSceneManager.DefaultStateSynchronizationPerformanceParametersPrefabName, ".prefab"));
                Object.DestroyImmediate(hierarchyPrefab);
            }

            AssetDatabase.OpenAsset(prefab);
        }