using System.Linq; using System.Collections.Generic; using UnityEngine; using UnityEngine.UIElements; using UnityEngine.XR.Interaction.Toolkit; using UnityEngine.XR.Interaction.Toolkit.Inputs.Simulation; namespace UnityEditor.XR.Interaction.Toolkit { /// /// Class configuration to display XR Interaction Toolkit settings in the Project Settings window. /// class XRInteractionToolkitSettingsProvider : SettingsProvider { /// /// Scope that adds a top and a left margin. /// class SettingsMarginScope : GUI.Scope { internal SettingsMarginScope() { const float topMargin = 10f; const float leftMargin = 10f; GUILayout.BeginHorizontal(); GUILayout.Space(leftMargin); GUILayout.BeginVertical(); GUILayout.Space(topMargin); } protected override void CloseScope() { GUILayout.EndVertical(); GUILayout.EndHorizontal(); } } /// /// Contents of GUI elements used by this settings provider. /// internal static class Contents { public static readonly GUIContent interactionSimulatorSettingsTitle = new GUIContent("Interaction Simulator Settings"); public static readonly GUIContent interactionLayerSettingsTitle = new GUIContent("Interaction Layer Settings"); public static readonly GUIContent editorSettingsTitle = new GUIContent("Editor Settings"); public static readonly GUIStyle sectionTitleStyle = new GUIStyle("Label") { fontSize = 15, fontStyle = FontStyle.Bold, }; } /// /// The path to display this settings provider in the Project Settings window. /// internal const string k_SettingsPath = "Project/XR Plug-in Management/XR Interaction Toolkit"; Editor m_InteractionLayerSettingsEditor; Editor m_XRInteractionEditorSettingsEditor; Editor m_XRDeviceSimulatorSettingsEditor; /// /// Create and returns this settings provider. /// /// Returns a new instance of this settings provider. [SettingsProvider] #pragma warning disable IDE0051 // Remove unused private members -- Invoked by Unity due to attribute static SettingsProvider CreateInteractionLayerProvider() #pragma warning restore IDE0051 { var keywordsList = GetSearchKeywordsFromPath(AssetDatabase.GetAssetPath(InteractionLayerSettings.Instance)).ToList(); return new XRInteractionToolkitSettingsProvider { keywords = keywordsList }; } XRInteractionToolkitSettingsProvider(string path = k_SettingsPath, SettingsScope scopes = SettingsScope.Project, IEnumerable keywords = null) : base(path, scopes, keywords) { } /// /// Draws the editor. /// void DrawXRInteractionEditorSettingsEditor() { if (m_XRInteractionEditorSettingsEditor != null) { GUILayout.Label(Contents.editorSettingsTitle, Contents.sectionTitleStyle); m_XRInteractionEditorSettingsEditor.OnInspectorGUI(); } } /// /// Draws the editor. /// void DrawInteractionLayerSettingsEditor() { if (m_InteractionLayerSettingsEditor != null) { GUILayout.Label(Contents.interactionLayerSettingsTitle, Contents.sectionTitleStyle); m_InteractionLayerSettingsEditor.OnInspectorGUI(); } } /// /// Draws the editor. /// void DrawXRDeviceSimulatorSettingsEditor() { if (m_InteractionLayerSettingsEditor != null) { GUILayout.Label(Contents.interactionSimulatorSettingsTitle, Contents.sectionTitleStyle); m_XRDeviceSimulatorSettingsEditor.OnInspectorGUI(); } } /// public override void OnActivate(string searchContext, VisualElement rootElement) { base.OnActivate(searchContext, rootElement); m_InteractionLayerSettingsEditor = Editor.CreateEditor(InteractionLayerSettings.Instance); m_XRInteractionEditorSettingsEditor = Editor.CreateEditor(XRInteractionEditorSettings.Instance); m_XRDeviceSimulatorSettingsEditor = Editor.CreateEditor(XRDeviceSimulatorSettings.Instance); } /// public override void OnDeactivate() { base.OnDeactivate(); if (m_InteractionLayerSettingsEditor != null) Object.DestroyImmediate(m_InteractionLayerSettingsEditor); if (m_XRInteractionEditorSettingsEditor != null) Object.DestroyImmediate(m_XRInteractionEditorSettingsEditor); if (m_XRDeviceSimulatorSettingsEditor != null) Object.DestroyImmediate(m_XRDeviceSimulatorSettingsEditor); } /// public override void OnGUI(string searchContext) { base.OnGUI(searchContext); using (new SettingsMarginScope()) { DrawXRDeviceSimulatorSettingsEditor(); EditorGUILayout.Space(); DrawXRInteractionEditorSettingsEditor(); EditorGUILayout.Space(); DrawInteractionLayerSettingsEditor(); } } } }