mixedreality/com.microsoft.mixedreality..../Runtime/Utilities/XRSettingsHelpers.cs

76 lines
3.0 KiB
C#

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.XR.Management;
using UnityEngine.XR.Management;
namespace Microsoft.MixedReality.OpenXR
{
internal static class XRSettingsHelpers
{
/// <summary>
/// Provides the XRGeneralSettings corresponding to the specified BuildTargetGroup.
/// If the XRGeneralSettings asset wasn't previously created, this ensures it's created.
/// </summary>
public static XRGeneralSettings GetOrCreateXRGeneralSettings(BuildTargetGroup targetGroup)
{
XRGeneralSettings settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(targetGroup);
if (settings == null)
{
XRGeneralSettingsPerBuildTarget generalSettings = GetXRGeneralSettingsPerBuildTarget();
if (generalSettings != null && !generalSettings.HasSettingsForBuildTarget(targetGroup))
{
generalSettings.CreateDefaultSettingsForBuildTarget(targetGroup);
}
settings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(targetGroup);
}
return settings;
}
/// <summary>
/// Provides the XRManagerSettings corresponding to the specified BuildTargetGroup.
/// If the XRManagerSettings asset wasn't previously created, this ensures it's created.
/// </summary>
public static XRManagerSettings GetOrCreateXRManagerSettings(BuildTargetGroup targetGroup)
{
XRGeneralSettings settings = GetOrCreateXRGeneralSettings(targetGroup);
if (settings != null && settings.AssignedSettings == null)
{
XRGeneralSettingsPerBuildTarget generalSettings = GetXRGeneralSettingsPerBuildTarget();
if (generalSettings != null && !generalSettings.HasManagerSettingsForBuildTarget(targetGroup))
{
generalSettings.CreateDefaultManagerSettingsForBuildTarget(targetGroup);
}
}
return settings != null ? settings.AssignedSettings : null;
}
/// <summary>
/// Tries to read out the XRGeneralSettingsPerBuildTarget from XRGeneralSettingsPerBuildTarget.
/// If the config object hasn't been stored yet, the XR Plug-in Management window is opened to trigger its creation.
/// </summary>
private static XRGeneralSettingsPerBuildTarget GetXRGeneralSettingsPerBuildTarget()
{
if (!EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out XRGeneralSettingsPerBuildTarget generalSettings))
{
SettingsService.OpenProjectSettings("Project/XR Plug-in Management");
EditorBuildSettings.TryGetConfigObject(XRGeneralSettings.k_SettingsKey, out generalSettings);
}
return generalSettings;
}
}
}
#endif // UNITY_EDITOR