添加一个表格组件,原理上贴近现代表格系统,理论上可以应对超大型表格以及离散数据集合。
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.UI;
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
using XericUI.OverrideUI;
|
||||
|
||||
namespace XericUIEditor.OverrideUI
|
||||
{
|
||||
/// <summary>
|
||||
/// XericStyleButton 的 Inspector 编辑器。
|
||||
/// 完全替换 Selectable 的 Transition/ColorBlock/SpriteState 区域为 StyleSheet 状态块,
|
||||
/// 保留 Interactable、Navigation、onClick 等基础功能。
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XericStyleButton), true)]
|
||||
[CanEditMultipleObjects]
|
||||
internal class XericStyleButtonEditor : SelectableEditor
|
||||
{
|
||||
private SerializedProperty m_InteractableProp;
|
||||
private SerializedProperty m_TargetGraphicProp;
|
||||
private SerializedProperty m_NavigationProp;
|
||||
|
||||
private SerializedProperty m_ColorStateProp;
|
||||
private SerializedProperty m_TextureStateProp;
|
||||
private SerializedProperty m_EnableStyleTransitionProp;
|
||||
private SerializedProperty m_OnClickProp;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
|
||||
m_InteractableProp = serializedObject.FindProperty("m_Interactable");
|
||||
m_TargetGraphicProp = serializedObject.FindProperty("m_TargetGraphic");
|
||||
m_NavigationProp = serializedObject.FindProperty("m_Navigation");
|
||||
|
||||
m_ColorStateProp = serializedObject.FindProperty("m_ColorState");
|
||||
m_TextureStateProp = serializedObject.FindProperty("m_TextureState");
|
||||
m_EnableStyleTransitionProp = serializedObject.FindProperty("m_EnableStyleTransition");
|
||||
m_OnClickProp = serializedObject.FindProperty("m_OnClick");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
|
||||
// === 1. Interactable ===
|
||||
EditorGUILayout.PropertyField(m_InteractableProp);
|
||||
|
||||
// === 2. 样式表状态块(替代 Transition + ColorBlock + SpriteState) ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("样式表配置(替代 Transition)", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.PropertyField(m_ColorStateProp, new GUIContent("颜色状态块"), true);
|
||||
EditorGUILayout.Space(4);
|
||||
EditorGUILayout.PropertyField(m_TextureStateProp, new GUIContent("纹理状态块"), true);
|
||||
|
||||
if (m_ColorStateProp.isExpanded || m_TextureStateProp.isExpanded)
|
||||
{
|
||||
EditorGUILayout.Space(2);
|
||||
EditorGUILayout.PropertyField(m_EnableStyleTransitionProp);
|
||||
}
|
||||
|
||||
// === 3. Target Graphic ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.PropertyField(m_TargetGraphicProp);
|
||||
|
||||
Graphic graphic = m_TargetGraphicProp.objectReferenceValue as Graphic;
|
||||
if (graphic == null)
|
||||
graphic = (target as Selectable)?.GetComponent<Graphic>();
|
||||
if (graphic == null)
|
||||
EditorGUILayout.HelpBox("你需要指定一个 Graphic 目标才能使用样式表颜色过渡。", MessageType.Warning);
|
||||
|
||||
// === 4. Navigation ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.PropertyField(m_NavigationProp);
|
||||
|
||||
// === 5. onClick ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.PropertyField(m_OnClickProp);
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93a0ee7d0089fb141a33b3db631b645a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,47 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.UI;
|
||||
|
||||
using XericUI.OverrideUI;
|
||||
|
||||
namespace XericUIEditor.OverrideUI
|
||||
{
|
||||
/// <summary>
|
||||
/// XericStyleImage 的 Inspector 编辑器——继承 GraphicEditor,
|
||||
/// 额外展示颜色、纹理、材质三个 StyleField 和自动刷新开关。
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XericStyleImage), true)]
|
||||
[CanEditMultipleObjects]
|
||||
internal class XericStyleImageEditor : GraphicEditor
|
||||
{
|
||||
private SerializedProperty m_ColorStyleProp;
|
||||
private SerializedProperty m_TextureStyleProp;
|
||||
private SerializedProperty m_MaterialStyleProp;
|
||||
private SerializedProperty m_AutoRefreshProp;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
|
||||
m_ColorStyleProp = serializedObject.FindProperty("m_ColorStyle");
|
||||
m_TextureStyleProp = serializedObject.FindProperty("m_TextureStyle");
|
||||
m_MaterialStyleProp = serializedObject.FindProperty("m_MaterialStyle");
|
||||
m_AutoRefreshProp = serializedObject.FindProperty("m_AutoRefresh");
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8f9db8103c790b3449487b618b5a5db7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,135 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEditor.UI;
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
using UnityEngine.UI;
|
||||
|
||||
using XericUI.OverrideUI;
|
||||
|
||||
namespace XericUIEditor.OverrideUI
|
||||
{
|
||||
/// <summary>
|
||||
/// XericStyleToggle 的 Inspector 编辑器。
|
||||
/// 完全替换 Selectable 的 Transition/ColorBlock/SpriteState 区域为 StyleSheet 状态块,
|
||||
/// 保留 Interactable、Navigation、isOn、graphic、group、onValueChanged 等基础功能。
|
||||
/// </summary>
|
||||
[CustomEditor(typeof(XericStyleToggle), true)]
|
||||
[CanEditMultipleObjects]
|
||||
internal class XericStyleToggleEditor : SelectableEditor
|
||||
{
|
||||
// Selectable 基础
|
||||
private SerializedProperty m_InteractableProp;
|
||||
private SerializedProperty m_NavigationProp;
|
||||
|
||||
// Toggle 基础
|
||||
private SerializedProperty m_IsOnProp;
|
||||
private SerializedProperty m_TransitionProp;
|
||||
private SerializedProperty m_GraphicProp;
|
||||
private SerializedProperty m_GroupProp;
|
||||
private SerializedProperty m_OnValueChangedProp;
|
||||
|
||||
// StyleSheet 专用
|
||||
private SerializedProperty m_ColorStateProp;
|
||||
private SerializedProperty m_TextureStateProp;
|
||||
private SerializedProperty m_OnOverrideColorProp;
|
||||
private SerializedProperty m_OnOverrideTextureProp;
|
||||
private SerializedProperty m_CheckmarkStyleProp;
|
||||
private SerializedProperty m_EnableStyleTransitionProp;
|
||||
|
||||
protected override void OnEnable()
|
||||
{
|
||||
base.OnEnable();
|
||||
|
||||
m_InteractableProp = serializedObject.FindProperty("m_Interactable");
|
||||
m_NavigationProp = serializedObject.FindProperty("m_Navigation");
|
||||
|
||||
m_IsOnProp = serializedObject.FindProperty("m_IsOn");
|
||||
m_TransitionProp = serializedObject.FindProperty("toggleTransition");
|
||||
m_GraphicProp = serializedObject.FindProperty("graphic");
|
||||
m_GroupProp = serializedObject.FindProperty("m_Group");
|
||||
m_OnValueChangedProp = serializedObject.FindProperty("onValueChanged");
|
||||
|
||||
m_ColorStateProp = serializedObject.FindProperty("m_ColorState");
|
||||
m_TextureStateProp = serializedObject.FindProperty("m_TextureState");
|
||||
m_OnOverrideColorProp = serializedObject.FindProperty("m_OnOverrideColor");
|
||||
m_OnOverrideTextureProp = serializedObject.FindProperty("m_OnOverrideTexture");
|
||||
m_CheckmarkStyleProp = serializedObject.FindProperty("m_CheckmarkStyle");
|
||||
m_EnableStyleTransitionProp = serializedObject.FindProperty("m_EnableStyleTransition");
|
||||
}
|
||||
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
serializedObject.Update();
|
||||
XericStyleToggle toggle = target as XericStyleToggle;
|
||||
|
||||
// === 1. Interactable ===
|
||||
EditorGUILayout.PropertyField(m_InteractableProp);
|
||||
|
||||
// === 2. 样式表状态块(替代 Transition + ColorBlock + SpriteState) ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.LabelField("样式表配置(替代 Transition)", EditorStyles.boldLabel);
|
||||
|
||||
EditorGUILayout.PropertyField(m_ColorStateProp, new GUIContent("颜色状态块"), true);
|
||||
EditorGUILayout.Space(4);
|
||||
EditorGUILayout.PropertyField(m_TextureStateProp, new GUIContent("纹理状态块"), true);
|
||||
|
||||
bool anyExpanded = m_ColorStateProp.isExpanded || m_TextureStateProp.isExpanded;
|
||||
if (anyExpanded)
|
||||
{
|
||||
EditorGUILayout.Space(2);
|
||||
EditorGUILayout.PropertyField(m_OnOverrideColorProp);
|
||||
EditorGUILayout.PropertyField(m_OnOverrideTextureProp);
|
||||
EditorGUILayout.PropertyField(m_CheckmarkStyleProp);
|
||||
EditorGUILayout.PropertyField(m_EnableStyleTransitionProp);
|
||||
}
|
||||
|
||||
// === 3. isOn ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(m_IsOnProp);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
EditorSceneManager.MarkSceneDirty(toggle!.gameObject.scene);
|
||||
|
||||
ToggleGroup group = m_GroupProp.objectReferenceValue as ToggleGroup;
|
||||
toggle!.isOn = m_IsOnProp.boolValue;
|
||||
|
||||
if (group != null && group.isActiveAndEnabled && toggle!.IsActive())
|
||||
{
|
||||
if (toggle!.isOn || (!group.AnyTogglesOn() && !group.allowSwitchOff))
|
||||
{
|
||||
toggle!.isOn = true;
|
||||
group.NotifyToggleOn(toggle!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// === 4. Toggle 切换效果 & Graphic ===
|
||||
EditorGUILayout.PropertyField(m_TransitionProp);
|
||||
EditorGUILayout.PropertyField(m_GraphicProp);
|
||||
|
||||
// === 5. Group ===
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(m_GroupProp);
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
if (!Application.isPlaying)
|
||||
EditorSceneManager.MarkSceneDirty(toggle!.gameObject.scene);
|
||||
toggle!.group = m_GroupProp.objectReferenceValue as ToggleGroup;
|
||||
}
|
||||
|
||||
// === 6. Navigation ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.PropertyField(m_NavigationProp);
|
||||
|
||||
// === 7. onValueChanged ===
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.PropertyField(m_OnValueChangedProp);
|
||||
|
||||
serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 333577a929d25434e87d0a53360fce29
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user