3
AttributeLibrary
李若辰 edited this page 2026-03-17 11:35:35 +08:00

返回

ReName

重命名特性

在没有安装odin插件的旧版本Unity(<=2021)上可以直接替换细节面板中的参数名。
不过由于无法和odin兼容,odin的功能会覆盖掉这个特性. 虽然大多数情况下不起作用,但仍可以使用配套的一系列方法来处理这个特性,如批量查找,ugui系统重命名等。

var obj = new MyObject();

// 比如 MyObject 中有一个字段叫 getvalue ,那么可以这样调用,返回为找到的 ReName  标记,如果没找到,则返回null
RenameAttribute.GetRenameAttribute(typeof(MyObject), "getvalue")

此特性用法比较早期,只能用来找一下是否标记了自定义的别名。

CanFind

可查找特性

你可以在任何位置使用该特性进行标记,使用字符串或枚举进行标记均可,内部会转为统一的字符串形式进行保存。

在需要进行查找的时候,使用对应的扩展方法即可:

var obj = new MyObject();

// 在实例上查找标签,这会返回目标实例上的所有特性标签(以字符串格式)
obj.GetClassCanFindTag()

// 在类型上查找标签,这会返回类型上所有特性标签(以字符串格式)
typeof(MyObject).GetClassCanFindTag()

// 在标签上查找类型,这会返回所有带有指定标签名称的类型
("标签").GetClassByCanFindTag()

// 在枚举上查找类型,这会返回所有带有指定标签名称的类型
myEnum.classTag.GetClassByCanFindTag()

可查找特性可以在一个类上重复标记,比如我定义了一个接口类,我希望定义它使用的请求地址,域名,方法等等,我可以像这样重复标记:

public static Uri LocalhostEnvironmentUriRoot = new Uri("http://192.168.0.48:8081"); 
[Serializable]
[CanFindClass("Post")]
[CanFindClass(nameof(LocalhostEnvironmentUriRoot))]
public class Ques_ExposeSegmentDetailSegmodel
{
    // ...
}

// 这样在面对一个接口时,可以直接对其
if (ques.GetClassCanFindTag().Contains(nameof(LocalhostEnvironmentUriRoot)))
  // 切换到这个域名

只是举个例子,随便找一些自己喜欢的东西就行。

CusMe

自定义菜单特性

一个比较复合的用法,使用相关的特性对一个类进行标记后,在生成界面的时候可以直接使用这个类型的对象自动生成界面,生成的界面和这个类中的标记字段对应。