From 4546da4928054239409d3557e095450e8b3c475b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Tue, 16 Dec 2025 16:51:40 +0800 Subject: [PATCH] fix --- Editor/UX/Selectable/UXSelectableEditor.cs | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Editor/UX/Selectable/UXSelectableEditor.cs b/Editor/UX/Selectable/UXSelectableEditor.cs index d84b2c0..8931fe7 100644 --- a/Editor/UX/Selectable/UXSelectableEditor.cs +++ b/Editor/UX/Selectable/UXSelectableEditor.cs @@ -269,12 +269,24 @@ namespace UnityEngine.UI if (m_Navigation != null) { var modeProp = m_Navigation.FindPropertyRelative("m_Mode"); - EditorGUILayout.PropertyField(modeProp, new GUIContent("Navigation")); - int value = modeProp.intValue; - int explicitMask = (int)UXNavigation.Mode.Explicit; - bool onlyExplicit = (value & explicitMask) == explicitMask && (value & ~explicitMask) == 0; - if (!modeProp.hasMultipleDifferentValues && onlyExplicit) + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = modeProp.hasMultipleDifferentValues; + + UXNavigation.Mode cur = (UXNavigation.Mode)modeProp.intValue; + UXNavigation.Mode next = (UXNavigation.Mode)EditorGUILayout.EnumFlagsField("Navigation", cur); + + EditorGUI.showMixedValue = false; + if (EditorGUI.EndChangeCheck()) + { + modeProp.intValue = (int)next; + } + + int explicitMask = (int)UXNavigation.Mode.Explicit; + int value = modeProp.intValue; + bool onlyExplicit = !modeProp.hasMultipleDifferentValues && (value & explicitMask) == explicitMask && (value & ~explicitMask) == 0; + + if (onlyExplicit) { EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnUp")); EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnDown")); @@ -282,6 +294,7 @@ namespace UnityEngine.UI EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnRight")); } + serializedObject.ApplyModifiedProperties(); } @@ -294,7 +307,6 @@ namespace UnityEngine.UI { (target as UXSelectable).Interactable = interactable; m_Interactable.boolValue = interactable; - // keep selection state consistent var selProp = serializedObject.FindProperty("m_SelectionState"); if (selProp != null) {