This commit is contained in:
陈思海 2025-12-16 16:51:40 +08:00
parent 57972c6900
commit 4546da4928

View File

@ -269,12 +269,24 @@ namespace UnityEngine.UI
if (m_Navigation != null) if (m_Navigation != null)
{ {
var modeProp = m_Navigation.FindPropertyRelative("m_Mode"); 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_SelectOnUp"));
EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnDown")); EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnDown"));
@ -282,6 +294,7 @@ namespace UnityEngine.UI
EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnRight")); EditorGUILayout.PropertyField(m_Navigation.FindPropertyRelative("m_SelectOnRight"));
} }
serializedObject.ApplyModifiedProperties();
} }
@ -294,7 +307,6 @@ namespace UnityEngine.UI
{ {
(target as UXSelectable).Interactable = interactable; (target as UXSelectable).Interactable = interactable;
m_Interactable.boolValue = interactable; m_Interactable.boolValue = interactable;
// keep selection state consistent
var selProp = serializedObject.FindProperty("m_SelectionState"); var selProp = serializedObject.FindProperty("m_SelectionState");
if (selProp != null) if (selProp != null)
{ {