diff --git a/Editor/OverrideUI/XericStyleImageEditor.cs b/Editor/OverrideUI/XericStyleImageEditor.cs index f345d08..3623cab 100644 --- a/Editor/OverrideUI/XericStyleImageEditor.cs +++ b/Editor/OverrideUI/XericStyleImageEditor.cs @@ -1,3 +1,4 @@ +using UnityEngine; using UnityEditor; using UnityEditor.UI; @@ -6,8 +7,9 @@ using XericUI.OverrideUI; namespace XericUIEditor.OverrideUI { /// - /// XericStyleImage 的 Inspector 编辑器——继承 GraphicEditor, - /// 额外展示颜色、纹理、材质三个 StyleField 和自动刷新开关。 + /// XericStyleImage 的 Inspector 编辑器—— + /// 仅显示颜色样式字段 + raycastTarget / raycastPadding / maskable。 + /// 不展示原始 Color/Sprite/Material(被样式表接管)。 /// [CustomEditor(typeof(XericStyleImage), true)] [CanEditMultipleObjects] @@ -16,30 +18,71 @@ namespace XericUIEditor.OverrideUI private SerializedProperty m_ColorStyleProp; private SerializedProperty m_TextureStyleProp; private SerializedProperty m_MaterialStyleProp; - private SerializedProperty m_AutoRefreshProp; + private SerializedProperty m_RaycastTargetProp; + private SerializedProperty m_RaycastPaddingProp; + private SerializedProperty m_MaskableProp; + private SerializedProperty m_ColorProp; + + // 折叠状态 + private static bool s_ColorFoldout = false; + private static bool s_TextureFoldout = false; + private static bool s_MaterialFoldout = false; protected override void OnEnable() { base.OnEnable(); - m_ColorStyleProp = serializedObject.FindProperty("m_ColorStyle"); + m_ColorStyleProp = serializedObject.FindProperty("m_ColorStyle"); m_TextureStyleProp = serializedObject.FindProperty("m_TextureStyle"); m_MaterialStyleProp = serializedObject.FindProperty("m_MaterialStyle"); - m_AutoRefreshProp = serializedObject.FindProperty("m_AutoRefresh"); + m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget"); + m_RaycastPaddingProp = serializedObject.FindProperty("m_RaycastPadding"); + m_MaskableProp = serializedObject.FindProperty("m_Maskable"); + m_ColorProp = serializedObject.FindProperty("m_Color"); } public override void OnInspectorGUI() { - base.OnInspectorGUI(); - EditorGUILayout.Space(); - serializedObject.Update(); + // === 颜色样式(主要展示) === EditorGUILayout.LabelField("样式表配置", EditorStyles.boldLabel); - EditorGUILayout.PropertyField(m_ColorStyleProp); - EditorGUILayout.PropertyField(m_TextureStyleProp); - EditorGUILayout.PropertyField(m_MaterialStyleProp); - EditorGUILayout.PropertyField(m_AutoRefreshProp); + EditorGUILayout.Space(2); + if (m_ColorStyleProp != null) + EditorGUILayout.PropertyField(m_ColorStyleProp, new GUIContent("颜色样式")); + + // 纹理和材质样式折叠(通常不需要改动) + s_TextureFoldout = EditorGUILayout.Foldout(s_TextureFoldout, "纹理 / 材质样式(高级)", true); + if (s_TextureFoldout) + { + EditorGUI.indentLevel++; + if (m_TextureStyleProp != null) + EditorGUILayout.PropertyField(m_TextureStyleProp, new GUIContent("纹理样式")); + if (m_MaterialStyleProp != null) + EditorGUILayout.PropertyField(m_MaterialStyleProp, new GUIContent("材质样式")); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(8); + + // === 颜色预览(只读) === + if (m_ColorProp != null) + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(m_ColorProp, new GUIContent("颜色(预览)")); + EditorGUI.EndDisabledGroup(); + } + + EditorGUILayout.Space(4); + + // === Raycast 与 Mask === + EditorGUILayout.LabelField("交互", EditorStyles.boldLabel); + if (m_RaycastTargetProp != null) + EditorGUILayout.PropertyField(m_RaycastTargetProp, new GUIContent("Raycast Target")); + if (m_RaycastPaddingProp != null) + EditorGUILayout.PropertyField(m_RaycastPaddingProp, new GUIContent("Raycast Padding")); + if (m_MaskableProp != null) + EditorGUILayout.PropertyField(m_MaskableProp, new GUIContent("Maskable")); serializedObject.ApplyModifiedProperties(); } diff --git a/Editor/SuperStyleSheet/StyleFieldDrawer.cs b/Editor/SuperStyleSheet/StyleFieldDrawer.cs index 888e6db..2d86818 100644 --- a/Editor/SuperStyleSheet/StyleFieldDrawer.cs +++ b/Editor/SuperStyleSheet/StyleFieldDrawer.cs @@ -26,6 +26,11 @@ namespace XericUIEditor public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { + var nsProp = property.FindPropertyRelative("Namespace"); + var pathProp = property.FindPropertyRelative("StylePath"); + if (nsProp == null || pathProp == null) + return LINE_HEIGHT + PADDING * 2; + string key = GetFoldKey(property); bool expanded = s_FoldoutStates.TryGetValue(key, out bool f) && f; @@ -37,7 +42,7 @@ namespace XericUIEditor // 有值才显示值类型行 string ns = GetNamespace(property); - string path = property.FindPropertyRelative("StylePath").stringValue; + string path = pathProp.stringValue; StyleValue val = StyleManager.GetValue(ns, path); if (val != null && val.ValueType != null) rowCount++; @@ -59,6 +64,12 @@ namespace XericUIEditor SerializedProperty nsProp = property.FindPropertyRelative("Namespace"); SerializedProperty pathProp = property.FindPropertyRelative("StylePath"); + if (nsProp == null || pathProp == null) + { + EditorGUI.LabelField(position, label, "(StyleField 未初始化)"); + return; + } + // === 标题行:折叠箭头 + 标签 + 路径下拉 === Rect headerRect = new Rect(position.x, position.y + PADDING, position.width, LINE_HEIGHT); @@ -213,7 +224,8 @@ namespace XericUIEditor private static string GetNamespace(SerializedProperty property) { - string ns = property.FindPropertyRelative("Namespace").stringValue; + var nsProp = property.FindPropertyRelative("Namespace"); + string ns = nsProp?.stringValue; return string.IsNullOrEmpty(ns) ? "default" : ns; } diff --git a/Editor/XTable/XTableEditorOverlay.cs b/Editor/XTable/XTableEditorOverlay.cs index 27b632a..0a1764a 100644 --- a/Editor/XTable/XTableEditorOverlay.cs +++ b/Editor/XTable/XTableEditorOverlay.cs @@ -3,7 +3,7 @@ using UnityEditor; using UnityEngine; - +using XericLibrary.Runtime.MacroLibrary; using XericUI.XTable.Rendering.Component; namespace XericUIEditor.XTable @@ -47,10 +47,10 @@ namespace XericUIEditor.XTable GameObject selected = Selection.activeGameObject; if (selected == null) return; - XericUIActionTable table = selected.GetComponent(); + var table = selected.GetComponent(); if (table == null) return; - RectTransform rect = table.GetComponent(); + var rect = table.RectTransform(); if (rect == null) return; DrawGridOverlay(table, rect); diff --git a/Runtime/Core/StyleSheetUI/DefaultXericStyleSheet.xsss b/Runtime/Core/StyleSheetUI/DefaultXericStyleSheet.xsss index eaed782..960b247 100644 --- a/Runtime/Core/StyleSheetUI/DefaultXericStyleSheet.xsss +++ b/Runtime/Core/StyleSheetUI/DefaultXericStyleSheet.xsss @@ -10,4 +10,20 @@ namespace: default .PressedColor = (0.78,0.78,0.78,1) .SelectedColor = (0.96,0.96,0.96,1) .DisabledColor = (0.6,0.6,0.6,0.8) +} + +/toggle/TargetGraphic/ColorTint:UnityEngine.UI.ColorBlock/ { +.NormalColor = (1,1,1,1) +.HighlightedColor = (0.96,0.96,0.96,1) +.PressedColor = (0.78,0.78,0.78,1) +.SelectedColor = (0.96,0.96,0.96,1) +.DisabledColor = (0.6,0.6,0.6,0.8) +} + +/image/ColorTint:UnityEngine.UI.ColorBlock/ { +.NormalColor = (1,1,1,1) +.HighlightedColor = (0.96,0.96,0.96,1) +.PressedColor = (0.78,0.78,0.78,1) +.SelectedColor = (0.96,0.96,0.96,1) +.DisabledColor = (0.6,0.6,0.6,0.8) } \ No newline at end of file diff --git a/Runtime/XTable/Rendering/Component/XericUIActionTable.cs b/Runtime/XTable/Rendering/Component/XericUIActionTable.cs index 66af54f..91811b0 100644 --- a/Runtime/XTable/Rendering/Component/XericUIActionTable.cs +++ b/Runtime/XTable/Rendering/Component/XericUIActionTable.cs @@ -96,6 +96,8 @@ namespace XericUI.XTable.Rendering.Component } } + public XTableCellData this[int row, int col] => TableData.GetOrCreateCell(row, col); + public float[] RowHeights => m_RowHeights; public float[] ColWidths => m_ColWidths; diff --git a/~Samples/Example/.sample.json b/~Samples/Example/.sample.json deleted file mode 100644 index 3b43eaf..0000000 --- a/~Samples/Example/.sample.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "displayName":"Example Sample", - "description": "Replace this string with your own description of the sample. Delete the Samples folder if not needed.", - "createSeparatePackage": false -} diff --git a/~Samples/Example/SampleExample.cs b/~Samples/Example/SampleExample.cs deleted file mode 100644 index adc78c6..0000000 --- a/~Samples/Example/SampleExample.cs +++ /dev/null @@ -1,28 +0,0 @@ -// ----------------------------------------------------------------------------- -// -// Use this sample example C# file to develop samples to guide usage of APIs -// in your package. -// -// ----------------------------------------------------------------------------- - -namespace Lrss3.Xericuiactionvessel -{ - /// - /// Provide a general description of the public class. - /// - /// - /// Packages require XmlDoc documentation for ALL Package APIs. - /// https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/xmldoc/xml-documentation-comments - /// - public class MyPublicSampleExampleClass - { - /// - /// Provide a description of what this public method does. - /// - public void CountThingsAndDoStuffAndOutputIt() - { - var result = new MyPublicRuntimeExampleClass().CountThingsAndDoStuff(1, 2, false); - Debug.Log("Call CountThingsAndDoStuffAndOutputIt returns " + result); - } - } -} \ No newline at end of file