添加各ui专用特性

This commit is contained in:
2026-07-24 15:57:17 +08:00
parent f3672df6a7
commit fcf59bc272
11 changed files with 251 additions and 14 deletions
@@ -0,0 +1,33 @@
using System;
namespace XericUI.ReflectionUIGenerator
{
/// <summary>
/// 专用 UI 特性抽象基类
/// 每个 UI 组件类型(Dropdown/Slider/InputField/Button)都有自己的专用 Attribute,
/// 继承此类即可自动设置 Tag 并携带 UI 相关配置。
///
/// UI 侧查询方式:metaData.Attributes.OfType<T>() 获取专用配置
///
/// 使用示例:
/// [XuiavrgFieldAsDropdown("选项A", "选项B", "选项C")]
/// public float myOption;
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]
public abstract class XuiavrgFieldAsAttribute : Attribute, IXuiavrgAttribute
{
/// <summary>子类指定自己的功能标记</summary>
public abstract XuiavrgFieldTag TargetTag { get; }
/// <summary>
/// 绑定元数据:自动设置 Tag
/// 子类重写此方法时应在开头调用 base.BindMetaData(metaData)
/// </summary>
public virtual void BindMetaData(AvrgMemberMetaData metaData)
{
metaData.Tag = TargetTag;
// 专用特性自动被收集到 metaData.Attributes 中
// UI 侧通过 metaData.Attributes.OfType<T>() 查询配置
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d04aeafdc2894de4ca7f573edd3ed355
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,17 @@
using System;
namespace XericUI.ReflectionUIGenerator
{
/// <summary>
/// 字段作为按钮(Button)的专用特性
/// 自动设置 Tag = Button,无额外配置参数
///
/// 使用示例:
/// [XuiavrgFieldAsButton]
/// public bool trigger;
/// </summary>
public class XuiavrgFieldAsButtonAttribute : XuiavrgFieldAsAttribute
{
public override XuiavrgFieldTag TargetTag => XuiavrgFieldTag.Button;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 311c35776d5a75b4696124d13680aa67
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,36 @@
using System;
namespace XericUI.ReflectionUIGenerator
{
/// <summary>
/// 字段作为下拉框(Dropdown)的专用特性
/// 自动设置 Tag = Dropdown,并携带默认选项列表
///
/// 使用示例:
/// [XuiavrgFieldAsDropdown("选项A", "选项B", "选项C")]
/// public float mode;
///
/// [XuiavrgFieldAsDropdown(1, 2, 3)] // 也支持数字
/// public int intMode;
///
/// UI 侧查询方式:
/// metaData.Attributes.OfType<XuiavrgFieldAsDropdownAttribute>()
/// .FirstOrDefault()?.DefaultValues
/// </summary>
public class XuiavrgFieldAsDropdownAttribute : XuiavrgFieldAsAttribute
{
/// <summary>默认选项列表</summary>
public object[] DefaultValues { get; }
public override XuiavrgFieldTag TargetTag => XuiavrgFieldTag.Dropdown;
/// <summary>
/// 创建下拉框专用特性
/// </summary>
/// <param name="defaultValues">默认选项值列表(params 参数,支持任意编译期常量类型)</param>
public XuiavrgFieldAsDropdownAttribute(params object[] defaultValues)
{
DefaultValues = defaultValues ?? Array.Empty<object>();
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 755f4db45daa6b94fb63e289b1d3c5b5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,36 @@
using System;
namespace XericUI.ReflectionUIGenerator
{
/// <summary>
/// 字段作为输入框(InputField)的专用特性
/// 自动设置 Tag = Input,并携带占位文本
///
/// 使用示例:
/// [XuiavrgFieldAsInputField("请输入名称")]
/// public string name;
///
/// [XuiavrgFieldAsInputField("输入数字")]
/// public float score;
///
/// UI 侧查询方式:
/// metaData.Attributes.OfType<XuiavrgFieldAsInputFieldAttribute>()
/// .FirstOrDefault()?.PlaceholderText
/// </summary>
public class XuiavrgFieldAsInputFieldAttribute : XuiavrgFieldAsAttribute
{
/// <summary>输入框占位文本(无输入时显示的灰色提示)</summary>
public string PlaceholderText { get; }
public override XuiavrgFieldTag TargetTag => XuiavrgFieldTag.Input;
/// <summary>
/// 创建输入框专用特性
/// </summary>
/// <param name="placeholderText">占位文本(无输入时的提示)</param>
public XuiavrgFieldAsInputFieldAttribute(string placeholderText)
{
PlaceholderText = placeholderText ?? "";
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 827b86614f1b91f46948f54a7c5b5e1b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,41 @@
using System;
namespace XericUI.ReflectionUIGenerator
{
/// <summary>
/// 字段作为滑动条(Slider)的专用特性
/// 自动设置 Tag = Slider,并携带最小值和最大值
///
/// 使用示例:
/// [XuiavrgFieldAsSlider(-100f, 100f)]
/// public float speed;
///
/// 对于 Vector2 类型(范围滑块),UI 端可通过 ValueType 判断切换 MinMax 模式,
/// 此时 Slider 的 Min/Max 作为边界值
///
/// UI 侧查询方式:
/// metaData.Attributes.OfType<XuiavrgFieldAsSliderAttribute>()
/// .FirstOrDefault()
/// </summary>
public class XuiavrgFieldAsSliderAttribute : XuiavrgFieldAsAttribute
{
/// <summary>滑动条最小值</summary>
public float MinValue { get; }
/// <summary>滑动条最大值</summary>
public float MaxValue { get; }
public override XuiavrgFieldTag TargetTag => XuiavrgFieldTag.Slider;
/// <summary>
/// 创建滑动条专用特性
/// </summary>
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
public XuiavrgFieldAsSliderAttribute(float min, float max)
{
MinValue = min;
MaxValue = max;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 15359a75f4e32f44e87a56b9980a3fcc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: