using System.Collections.Generic; using UnityEditor; using UnityEngine; using VisualizationSettings = UnityEditor.AI.NavMeshVisualizationSettings; namespace Unity.AI.Navigation.Editor { class NavigationPreferencesProvider : SettingsProvider { class Styles { internal static readonly GUIContent NavMeshVisualizationSettingsLabel = EditorGUIUtility.TrTextContent("NavMesh Visualization Settings"); internal static readonly GUIContent SelectedSurfacesOpacityLabel = EditorGUIUtility.TrTextContent("Selected Surfaces Opacity", "Controls the mesh transparency for surfaces inside the selection hierarchy"); internal static readonly GUIContent UnselectedSurfacesOpacityLabel = EditorGUIUtility.TrTextContent("Unselected Surfaces Opacity", "Controls the mesh transparency for surfaces outside the selection hierarchy"); internal static readonly GUIContent HeightMeshColorLabel = EditorGUIUtility.TrTextContent("Height Mesh Color", "Color used to display height mesh information in the scene view"); internal static readonly GUIContent ResetVisualizationSettingsButtonLabel = EditorGUIUtility.TrTextContent("Reset to Defaults", "Revert visualization settings to their original values. Customized values will be lost"); } NavigationPreferencesProvider(string path, SettingsScope scopes, IEnumerable keywords = null) : base(path, scopes, keywords) { } public override void OnGUI(string searchContext) { using (new SettingsWindow.GUIScope()) { EditorGUILayout.LabelField(Styles.NavMeshVisualizationSettingsLabel, EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); // Visualization settings VisualizationSettings.selectedSurfacesOpacity = EditorGUILayout.Slider(Styles.SelectedSurfacesOpacityLabel, VisualizationSettings.selectedSurfacesOpacity, 0, 1); VisualizationSettings.unselectedSurfacesOpacity = EditorGUILayout.Slider(Styles.UnselectedSurfacesOpacityLabel, VisualizationSettings.unselectedSurfacesOpacity, 0, 1); VisualizationSettings.heightMeshColor = EditorGUILayout.ColorField(Styles.HeightMeshColorLabel, VisualizationSettings.heightMeshColor); EditorGUILayout.Space(5); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); // Option to reset the visualization settings to their default values if (GUILayout.Button(Styles.ResetVisualizationSettingsButtonLabel, GUILayout.Width(160))) { VisualizationSettings.ResetSelectedSurfacesOpacity(); VisualizationSettings.ResetUnselectedSurfacesOpacity(); VisualizationSettings.ResetHeightMeshColor(); } EditorGUILayout.Space(10); EditorGUILayout.EndHorizontal(); // Repaint the scene view when settings changed to update the visualization accordingly if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } } } [SettingsProvider] internal static SettingsProvider CreateNavigationProjectSettingProvider() { var provider = new NavigationPreferencesProvider("Preferences/AI Navigation", SettingsScope.User, GetSearchKeywordsFromGUIContentProperties()); return provider; } } }