UnityGame/Library/PackageCache/com.unity.ai.navigation/Editor/NavMeshModifierEditor.cs
2024-10-27 10:53:47 +03:00

80 lines
4.0 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Unity.AI.Navigation.Editor
{
[CanEditMultipleObjects]
[CustomEditor(typeof(NavMeshModifier))]
class NavMeshModifierEditor : UnityEditor.Editor
{
SerializedProperty m_AffectedAgents;
SerializedProperty m_IgnoreFromBuild;
SerializedProperty m_OverrideArea;
SerializedProperty m_Area;
SerializedProperty m_ApplyToChildren;
SerializedProperty m_OverrideGenerateLinks;
SerializedProperty m_GenerateLinks;
void OnEnable()
{
m_AffectedAgents = serializedObject.FindProperty("m_AffectedAgents");
m_IgnoreFromBuild = serializedObject.FindProperty("m_IgnoreFromBuild");
m_OverrideArea = serializedObject.FindProperty("m_OverrideArea");
m_Area = serializedObject.FindProperty("m_Area");
m_ApplyToChildren = serializedObject.FindProperty("m_ApplyToChildren");
m_OverrideGenerateLinks = serializedObject.FindProperty("m_OverrideGenerateLinks");
m_GenerateLinks = serializedObject.FindProperty("m_GenerateLinks");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
int mode = m_IgnoreFromBuild.boolValue ? 1 : 0;
mode = EditorGUILayout.Popup(Content.Mode, mode, Content.ModeChoices);
m_IgnoreFromBuild.boolValue = mode == 1;
NavMeshComponentsGUIUtility.AgentMaskPopup(Content.AffectedAgents, m_AffectedAgents);
EditorGUILayout.PropertyField(m_ApplyToChildren, Content.ApplyToChildren);
if (!m_IgnoreFromBuild.boolValue)
{
EditorGUILayout.PropertyField(m_OverrideArea, Content.OverrideArea);
if (m_OverrideArea.boolValue)
{
EditorGUI.indentLevel++;
NavMeshComponentsGUIUtility.AreaPopup(Content.AreaType, m_Area);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(m_OverrideGenerateLinks, Content.OverrideGenerateLinks);
if (m_OverrideGenerateLinks.boolValue)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_GenerateLinks, Content.GenerateLinks);
EditorGUI.indentLevel--;
}
}
EditorGUILayout.Space();
serializedObject.ApplyModifiedProperties();
}
static class Content
{
public static readonly GUIContent Mode = EditorGUIUtility.TrTextContent("Mode", "Specifies whether to consider or ignore the affected GameObject(s).");
public static readonly string[] ModeChoices = { L10n.Tr("Add or Modify Object"), L10n.Tr("Remove Object") };
public static readonly GUIContent AffectedAgents = EditorGUIUtility.TrTextContent("Affected Agents", "Specifies which agents the NavMesh Modifier affects.");
public static readonly GUIContent ApplyToChildren = EditorGUIUtility.TrTextContent("Apply To Children", "If enabled, applies the configuration to the child hierarchy of the GameObject until another NavMesh Modifier component is encountered.");
public static readonly GUIContent OverrideArea = EditorGUIUtility.TrTextContent("Override Area", "If enabled, the area type of the NavMeshModifier will be overridden by the area type selected below.");
public static readonly GUIContent AreaType = EditorGUIUtility.TrTextContent("Area Type", "The area type of the NavMeshModifier.");
public static readonly GUIContent OverrideGenerateLinks = EditorGUIUtility.TrTextContent("Override Generate Links", "If enabled, forces the NavMesh bake process to either include or ignore the affected GameObject(s) when you generate links.");
public static readonly GUIContent GenerateLinks = EditorGUIUtility.TrTextContent("Generate Links", "If enabled, specifies whether or not to include the affected GameObject(s) when you generate links.");
}
}
}