// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. #if UNITY_2019 using UnityEditor; using UnityEngine; #endif // UNITY_2019 namespace Microsoft.MixedReality.Toolkit.Utilities.Editor { /// /// Provides MRTK UI helpers for supporting multiple XR pipelines in one profile. /// internal class XRPipelineUtility { #if UNITY_2019 private const string LegacyXRLabel = "Legacy XR"; private const string XRSDKLabel = "XR SDK"; private static readonly string[] Tabs = new string[] { LegacyXRLabel, XRSDKLabel }; private int tab = 0; #endif // UNITY_2019 public SupportedUnityXRPipelines SelectedPipeline { get; private set; } = #if UNITY_2019_3_OR_NEWER SupportedUnityXRPipelines.XRSDK; #else SupportedUnityXRPipelines.LegacyXR; #endif // UNITY_2019_3_OR_NEWER #if UNITY_2019 /// /// Call this in the inspector's OnEnable to properly set the default tab. /// public void Enable() { tab = XRSettingsUtilities.LegacyXRAvailable ? 0 : 1; } /// /// Renders two tabs, one for XR SDK and one for legacy XR. This allows the profile to support both pipelines at once. /// /// This is only needed for Unity 2019, since that's the only version where these two XR pipelines exist together. public void RenderXRPipelineTabs() { // The tabs should always be enabled. They're only used for visualization, not settings. using (new GUIEnabledWrapper()) { tab = GUILayout.Toolbar(tab, Tabs); SelectedPipeline = Tabs[tab] == XRSDKLabel ? SupportedUnityXRPipelines.XRSDK : SupportedUnityXRPipelines.LegacyXR; } EditorGUILayout.LabelField($"{Tabs[tab]}", EditorStyles.boldLabel); switch (SelectedPipeline) { case SupportedUnityXRPipelines.LegacyXR: if (!XRSettingsUtilities.LegacyXREnabled) { EditorGUILayout.HelpBox("Legacy XR is not enabled, so this list will not be loaded at runtime.", MessageType.Info); } break; case SupportedUnityXRPipelines.XRSDK: if (!XRSettingsUtilities.XRSDKEnabled) { EditorGUILayout.HelpBox("XR SDK is not enabled, so this list will not be loaded at runtime.", MessageType.Info); } break; } } #endif // UNITY_2019 } }