Unity Odin从入门到精通(一):定制特性详解

前言:Odin是一款功能十分强大的Unity第三方插件,可以让程序员从繁琐的GUI开发中解放出来,从而大大提高开发效率。以下介绍的所有关于Odin的章节都是基于3.0.6个人版,读者可以根据自己实际需求进行选择性的阅览。

注意事项:如下所示:
1.Odin中的定制特性还可以用在数组类型、列表类型的对象字段或者对象属性上。
2.属性表达式具有以下特性:
2.1.@:属性表达式的开头。
2.2.$value:用来获取当前成员数值。
2.3.$property:用来获取当前成员实例。
2.4.#(其他成员名称):用来获取其他成员实例。

AssetListAttribute:资源列表定制特性。
1.使用范围:可以用在Unity类型的对象字段上。
2.主要作用:用来选择、过滤、包含或排除资源列表中的资源。
3.包含字段:如下所示:
3.1.Path:不指定时,就从Assets目录下进行查找资源;否则就从指定的Assets子目录下面进行查找资源。
3.2.AutoPopulate:为true时,就将查找到的资源自动填充到指定的列表或者数组类型对象字段里面;否则就不自动填充。
3.3.LayerNames:按照指定的层级名称来查找资源。
3.4.Tags:按照指定的标签名称来查找资源。其中标签名称可以有多个,每个标签名称之间按照逗号分隔。
3.5.AssetNamePrefix:按照指定的前缀名称来查找资源。
3.6.CustomFilterMethod:按照自定义的函数来查找资源。其中当函数返回true时,表示传入该函数的资源是满足条件的资源,需要被保留下来;否则就要舍弃。

AssetSelectorAttribute:资源选择器定制特性。
1.使用范围:可以用在Unity类型的对象字段上。
2.主要作用:在对象字段旁边添加一个小按钮,点击该按钮就会弹出资源列表,从而方便用户选择一个资源来赋值给对象字段。
3.包含字段:如下所示:
3.1.SearchInFolders:不指定时,就从Assets目录下进行查找资源;否则就从指定的Assets开头的目录下面进行查找资源,其中指定的目录可以有多个,每个目录之间按照逗号分割。
3.2.FlattenTreeView:当该字段值true时,点击小按钮弹出的资源列表将会以平铺的方式进行展示。当该字段值false时,点击小按钮弹出的资源列表将会以树状的结构进行展示。
3.3.Filter:该字段值将会以参数形式传递给AssetDatabase.FindAssets函数,用来获取资源列表。
3.4.DropdownTitle:当该字段值为null或者""时,资源列表就不显示标题;否则资源列表就显示标题且标题内容为该字段值。
3.5.DropdownWidth:当该字段值大于0时,资源列表的宽度就等于该字段值乘以2。当该字段值小于等于0时,资源列表的宽度就自动调整。
3.6.DropdownHeight:当该字段值小于0时,资源列表就不显示;当该字段值等于0时,资源列表的高度就按照元素的个数进行自动调整;当该字段值大于0时,资源列表的高度就等于该字段值。
3.7.ExpandAllMenuItems:该字段值只有在资源列表按照树状结构进行展示时才有效。当该字段值为true时,每次打开资源列表都会自动展开条目;否则就按照最近的展开方式来显示条目。
3.8.DisableListAddButtonBehaviour:该字段只有在对象字段为列表或者数组类型时才有效。网上其他博主说点击加号按钮时,如果该字段值为true,就会以弹框形式显示资源列表;否则就会以树状结构形式显示资源列表。但是我在测试时发现,不论字段值为true还是false,一直都是以弹框形式显示资源列表,可能是我的姿势不对,也有可能是当前版本存在BUG。
3.9.DrawDropdownForListElements:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,对象字段存储的每个元素都会显示小按钮;否则对象字段存储的每个元素都不会显示小按钮。
3.10.IsUniqueList:该字段只有在对象字段为列表或者数组类型时才有效。网上其他博主说点击加号按钮打开资源列表时,如果该字段值为true,就不能添加重复的条目;否则就可以添加重复的条目。但是我在测试时发现,不论字段值为true还是false,一直都是以弹框形式显示资源列表并且可以重复添加相同的条目,可能是我的姿势不对,也有可能是当前版本存在BUG。
3.11.ExcludeExistingValuesInList:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,点击小按钮打开资源列表,此时已经选择的条目就会从资源列表中移除;否则已经选择的条目就不会从资源列表中移除。
4.包含属性:如下所示:
4.1.Paths:不指定时,就从Assets目录下进行查找资源;否则就从指定的Assets开头的目录下面进行查找资源,其中指定的目录可以有多个,每个目录之间按照竖线分割。
5.注意事项:如下所示:
5.1.SearchInFolders字段和Paths属性同时被应用时,此时就会按照右边成员替换左边成员方式进行设置。

AssetsOnlyAttribute:项目资源定制特性。
1.使用范围:可以用在Unity类型的对象字段上。
2.主要作用:用来指定对象字段的数值是来自于场景中的资源,而不是来自于场景中的对象。

BoxGroupAttribute:箱组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板中将具有相同组名的对象字段组织在一起进行显示。
3.包含字段:如下所示:
3.1.LabelText:该字段值为null时,组名就为groupId字段值;否则组名就为该字段值。
3.2.ShowLabel:该字段值为true时,就会显示组名;否则就会隐藏组名。
3.3.CenterLabel:该字段值为true时,就会将组名进行居中对齐;否则就会将组名进行居左对齐。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前箱组与指定参数代表的箱组进行组合。

ButtonAttribute:按钮定制特性。
1.使用范围:只能用在函数上。
2.主要作用:在检视面板上创建一个按钮,点击该按钮时就会调用关联的函数。
3.包含字段:如下所示:
3.1.ButtonHeight:当该字段值小于等于0时,按钮高度值就默认为16;否则按钮高度值就默认为字段值。
3.2.Name:当该字段值为null或者""时,按钮文本值就默认为函数名;否则按钮文本值就默认为字段值。
3.3.Style:该字段值表示按钮显示样式。常用样式如下所示:
3.3.1.Box:绘制一个以按钮文本值为标题的折叠框,该折叠框内部包含参数和按钮。
3.3.2.CompactBox:绘制一个以按钮文本值为标题的折叠框以及Invoke按钮,该折叠框内部包含参数。
3.3.3.FoldoutButton:绘制一个按钮以及下拉列表,该下拉列表内部包含参数。
3.4.Expanded:该字段值只有在函数有参数时才有效。当该字段值为true时,就会隐藏折叠按钮并展开折叠框;否则就会显示折叠按钮并收起折叠框。
3.5.DisplayParameters:该字段值只有在函数有参数时才有效。当该字段值为true时,就会在检视面板中显示参数;否则就会在检视面板中隐藏参数并且通过ActionResolver或者ValueResolver来调用函数。
3.6.DirtyOnClick:该字段值只有在点击按钮时才有效。该字段值为true时,就会将包含的场景或者对象标记为"脏"状态;否则就不会将包含的场景或者对象标记为"脏"状态。
4.包含属性:如下所示:
4.1.DrawResult:该属性值为true时,就会在点击按钮时,在检视面板中绘制返回值;否则就不会在检视面板中绘制返回值。
4.2.DrawResultIsSet:当设置了DrawResult属性值时,该属性值为true;否则该属性值为false。

ButtonGroupAttribute:按钮组定制特性。
1.使用范围:只能用在函数上。
2.主要作用:在检视面板中将具有相同组名的按钮组织在一个整齐的水平组中。
3.包含构造函数:如下所示:
3.1.两参构造函数:通过参数值来设置组名和组序。其中组序值越小,在检视面板中就越优先绘制。

ChildGameObjectsOnlyAttribute:子游戏对象定制特性。
1.使用范围:可以用在Component类型、GameObject类型的对象字段上。
2.主要作用:在对象字段旁边添加一个小按钮,点击该按钮就会弹出子游戏对象列表,从而方便用户选择一个子游戏对象来赋值给对象字段。
3.包含字段:如下所示:
3.1.IncludeSelf:该字段值为true时,就会从根游戏对象(指的是挂载该脚本的游戏对象)处开始查找;否则就从根游戏对象的子节点处进行查找。
3.2.IncludeInactive:该字段值为true时,查找的子游戏对象就不仅包含未激活的游戏对象,而且还包含已激活的游戏对象;否则查找的子游戏对象就只包含已激活的游戏对象。

ColorPaletteAttribute:调色板定制特性。
1.使用范围:可以用在Color类型的对象字段上。
2.主要作用:在对象字段旁边添加一个默认调色板。用户可以从默认调色板中选择一个颜色值进行显示;也可以选择一个预定义调色板,然后从该调色板预定义的一组颜色值里面选择一个颜色值进行显示。
3.构造函数:如下所示:
3.1.无参构造函数:显示一组预定义的调色板。用户可以选择其中的一个调色板,然后从该调色板预定义的一组颜色值里面选择一个颜色值。
3.2.有参构造函数:显示一个指定名称的预定义调色板。如果不存在该调色板,就提醒用户创建该调色板;否则用户就可以从该调色板预定义的一组颜色值里面选择一个颜色值。
3.包含字段:如下所示:
3.1.PaletteName:该字段值等价于有参构造函数的参数值。其中字段值和参数值都同时支持成员引用和属性表达式。
3.2.ShowAlpha:当不显示预定义调色板时,如果该字段值为true,那么选择的颜色值就会显示Alpha分量值;否则就不会显示Alpha分量值。当显示预定义调色板时,只有在预定义调色板显示Alpha并且该字段值为true时,选择的颜色值就会显示Alpha分量值;否则就不会显示Alpha分量值。
4.注意事项:如下所示:
4.1.可以在Tools -> Odin Inspector -> Preferences -> Color Palettes面板当中查看或者编辑预定义调色板。
4.2.从默认调色板中得到的颜色值并不会同步更新到预定义调色板里面。
4.3.可以通过Sirenix.OdinInspector.Editor.ColorPaletteManager.Instance.ColorPalettes来获取所有的预定义调色板,供用户在脚本里面进行编辑。

CustomValueDrawerAttribute:自定义绘制定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:用来自定义绘制对象字段。
3.构造函数:如下所示:
3.1.有参构造函数:通过参数值来设置Action字段值。
4.包含字段:如下所示:
4.1.Action:该字段值表示解析字符串,通常由表达式或者函数组成,用来绘制对象字段。
5.注意事项:如下所示:
5.1.Action字段值为函数时,基本格式代码如下所示:

private static T MyCustomDrawerFunc(T value, GUIContent label, Func<GUIContent, bool> callNextDrawer);

其中static关键字可选,泛型T类型表示对象字段的数据类型,label表示对象字段的文本内容对象,callNextDrawer表示绘制对象字段名称和对象字段数值的回调函数。

CustomContextMenuAttribute:自定义上下文菜单定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在对象字段的上下文菜单中添加一个自定义的菜单项。
3.包含字段:如下所示:
3.1.MenuItem:该字段值表示自定义菜单项的名称。
3.2.Action:该字段值通常由表达式或者函数组成,用来表示单击自定义菜单项时要执行的操作。

DisplayAsStringAttribute:字符串展示定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:调用对象字段的ToString函数来获取字符串,并将该字符串以不可编辑的文本方式显示到检视面板上面。
3.包含字段:如下所示:
3.1.Overflow:该字段值为true时,字符串超过展示宽度的部分会被截断;否则字符串超过展示宽度的部分会被换行。
4.构造函数:如下所示:
4.1.无参构造函数:Overflow字段值默认为true。
4.2.有参构造函数:根据指定的参数值来设置Overflow字段值。

DisableContextMenuAttribute:禁用上下文菜单定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上控制上下文菜单是否被禁用。
3.包含字段:如下所示:
3.1.DisableForMember:该字段值用来控制对象字段的上下文菜单是否被禁用。
3.2.DisableForCollectionElements:该字段值只有在对象字段为集合类型时才有效,用来控制集合元素的上下文菜单是否被禁用。

DisableIfAttribute:条件禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上禁用验证条件结果值为true的对象字段。
3.包含字段:如下所示:
3.1.Condition:该字段表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会禁用对象字段;否则就会启用对象字段。
3.2.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。

DisableInInlineEditorsAttribute:内联编辑器禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的类型应用了InlineEditorAttribute定制特性时,就会禁用该对象字段。

DisableInEditorModeAttribute:非播放模式禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在非播放模式下禁用对象字段。

DisableInPlayModeAttribute:播放模式禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在播放模式下禁用对象字段。

DisableInNonPrefabsAttribute:非预制体禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在非预制体上面时,就会禁用该对象字段。

DisableInPrefabsAttribute:预制体禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体上面时,就会禁用该对象字段。

DisableInPrefabAssetsAttribute:预制体资源禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体资源上面时,就会禁用该对象字段。

DisableInPrefabInstancesAttribute:预制体实例禁用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体实例上面时,就会禁用该对象字段。

DelayedAttribute:延迟字段更改定制特性。
1.使用范围:可以用在基础类型的对象字段上。
2.主要作用:在检视面板中编辑对象字段时,延迟对其应用更改。

DelayedPropertyAttribute:延迟属性更改定制特性。
1.使用范围:可以用在基础类型的对象属性上。
2.主要作用:在检视面板中编辑对象属性时,延迟对其应用更改。

DetailedInfoBoxAttribute:详细消息框定制特性。
1.使用范围:可以用在任意类型的对象字段上。
2.主要作用:首先在检视面板上创建一个详细消息框;然后通过该详细消息框向用户传达消息内容以及详细信息。
3.包含字段:如下所示:
3.1.InfoMessageType:该字段值表示详细消息框的类型(警告类型、信息类型、错误类型、未知类型)。
3.2.Message:该字段值表示详细消息框中的消息内容。
3.3.Details:该字段值表示详细消息框中的详细信息。
3.4.VisibleIf:该字段值表示函数名称,通过该函数返回的布尔类型数值来控制详细消息框是否显示。

DrawWithUnityAttribute:Unity绘制定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段或者对象属性上。
2.主要作用:在视觉上使用Unity绘制系统(本质上还是使用Odin绘制系统)来绘制对象字段或者对象属性。

DictionaryDrawerSettings:字典绘制设置定制特性。
1.使用范围:只能用在字典类型的对象字段上。
2.主要作用:在检视面板中自定义字典的行为。
3.包含字段:如下所示:
3.1.KeyLabel:该字段值表示字典绘制时,备用的Key标签。
3.2.ValueLabel:该字段值表示字典绘制时,备用的Value标签。
3.3.IsReadOnly:该字段值表示是否为只读(不能进行添加条目、删除条目、编辑Key数值)的字典。
3.4.DisplayMode:该字段值表示绘制字典条目的模式。常用的模式如下所示:
3.4.1.OneLine:将字典的所有条目绘制成两列。其中左侧一列用来显示所有Key数值;右侧一列用来显示所有Value数值。
3.4.2.Foldout:该字段值表示将字典的条目绘制到一个由设置面板中的"Expand Foldout By Default"按钮控制收起或者展开的折叠框里面。其中折叠框的标题处用来显示Key名称和Key数值;折叠框的内部用来显示Value数值。
3.4.3.CollapsedFoldout:该字段值表示将字典的条目绘制到一个默认收起的折叠框里面。其中折叠框的标题处用来显示Key名称和Key数值;折叠框的内部用来显示Value数值。
3.4.4.ExpandedFoldout:该字段值表示将字典的条目绘制到一个默认展开的折叠框里面。其中折叠框的标题处用来显示Key名称和Key数值;折叠框的内部用来显示Value数值。

EnumPagingAttribute:枚举分页定制特性。
1.使用范围:可以用在枚举类型的对象字段上。
2.主要作用:使用“下一步”和“上一步”按钮在检视面板中绘制枚举选择器,从而允许用户循环地选择枚举值。

EnumToggleButtonsAttribute :枚举切换按钮定制特性。
1.使用范围:可以用在枚举类型的对象字段上。
2.主要作用:使用一组按钮来绘制枚举值。当枚举类型上面加上FlagAttribute时,可以多选枚举值;否则就只能单选枚举值。

EnableGUIAttribute:启用图形用户界面定制特性。
1.使用范围:可以用在只读的基础类型、Unity类型的对象字段或者对象属性上。
2.主要作用:在检视面板中将只读的对象字段或者对象属性的状态由不可编辑切换成可以编辑,但是只读的对象字段或者对象属性的数值仍然是不可改变的。

EnableIfAttribute:条件启用定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上启用验证条件结果值为true的对象字段。
3.包含字段:如下所示:
3.1.Condition:该字段表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会启用对象字段;否则就会禁用对象字段。
3.2.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。

FilePathAttribute:文件路径定制特性。
1.使用范围:可以用在字符串类型的对象字段上。
2.主要作用:首先点击路径按钮来选择文件路径;然后将该文件路径赋值给对象字段并显示到输入框中。
3.包含字段:如下所示:
3.1.AbsolutePath:该字段值为true时,就将选择文件的绝对路径赋值给对象字段;否则就将选择文件相对于项目工程的路径赋值给对象字段。
3.2.ParentFolder:该字段只有在AbsolutePath值为false时才有效,并且支持使用美元符进行成员引用。此时选择的文件将会以相对于该字段值的路径赋值给对象字段。
3.3.Extensions:该字段表示文件扩展名列表字符串,并且支持使用美元符进行成员引用。可以使用逗号或者分号来分割每个文件扩展名。
3.4.RequireExistingPath:该字段值为true时,如果对象字段保存的路径不存在就会展示错误提示;否则就不展示错误提示。
3.5.UseBackslashes:该字段值为false时,对象字段保存的路径就使用正向斜线来分割;否则对象字段保存的路径就使用反向斜线来分割。

FolderPathAttribute :目录路径定制特性。
1.使用范围:可以用在字符串类型的对象字段上。
2.主要作用:首先点击路径按钮来选择目录路径;然后将该目录路径赋值给对象字段并显示到输入框中。
3.包含字段:如下所示:
3.1.AbsolutePath:该字段值为true时,就将选择目录的绝对路径赋值给对象字段;否则就将选择目录相对于项目工程的路径赋值给对象字段。
3.2.ParentFolder:该字段只有在AbsolutePath值为false时才有效,并且支持使用美元符进行成员引用。此时选择的目录将会以相对于该字段值的路径赋值给对象字段。
3.3.RequireExistingPath:该字段值为true时,如果对象字段保存的路径不存在就会展示错误提示;否则就不展示错误提示。
3.4.UseBackslashes:该字段值为false时,对象字段保存的路径就使用正向斜线来分割;否则对象字段保存的路径就使用反向斜线来分割。

FoldoutGroupAttribute:折叠组定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:在检视面板中将相同组名的对象字段组织到一个折叠组中。
3.包含字段:如下所示:
3.1.Expanded:该字段值为true时,就会自动展开折叠组;否则就会自动收起折叠组。
3.2.HasDefinedExpanded:当设置了Expanded字段值时,该字段值为true;否则该字段值为false。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前折叠组与指定参数代表的折叠组进行组合。

GUIColorAttribute:图形用户界面颜色定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:在检视面板中用指定的颜色值来绘制对象字段对应的界面。
3.构造函数:如下所示:
3.1.单参构造函数:通过参数值来设置GetColor字段值。
3.2.四参构造函数:通过参数值来设置Color字段值。
4.包含字段:如下所示:
4.1.Color:该字段值表示对象字段对应界面的颜色值。
4.2.GetColor:该字段值可以是Color类型的字段名或者属性名或者表达式、返回Color类型的静态函数或者实例函数。通过将该字段值得到的颜色值赋值给Color字段。

HideInInlineEditorsAttribute:隐藏内联编辑器中对象字段的子属性定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:在内联编辑器中隐藏应用该定制特性的对象字段子属性。

HideInTablesAttribute:隐藏表格列定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:和TableListAttribute定制特性配合使用,用来隐藏对象字段对应的表格列。

HideMonoScriptAttribute:隐藏MonoBehaviour组件中的属性定制特性。
1.使用范围:可以用在MonoBehaviour派生类型上。
2.主要作用:在检视面板上隐藏指定MonoBehaviour组件中的Script属性。

HideNetworkBehaviourFields:隐藏NetworkBehaviour组件中的字段定制特性。
1.使用范围:可以用NetworkBehaviour派生类型上。
2.主要作用:在检视面板上隐藏指定NetworkBehaviour组件中的Network Channel字段和Network Send Interval字段。

HideReferenceObjectPickerAttribute:隐藏引用对象选择器定制特性。
1.使用范围:在SerializedMonoBehaviour派生类型里面,该定制特性可以用在非Unity序列化引用类型的对象字段上。
2.主要作用:当对象字段不为空时,就会在检视面板上隐藏引用对象选择器;否则就会在检视面板上显示引用对象选择器。
3.注意事项:如下所示:
3.1.在对象字段身上右键单击时会弹出操作菜单。常用的菜单项如下所示:
3.1.1.Set To Null:将对象字段设置为空。
3.1.2.Change Type:切换对象字段是否为空。
3.1.3.Copy Special:按照指定的模式来拷贝对象字段。

HideLabelAttribute:隐藏标签定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:在检视面板上隐藏对象字段对应的名称标签。

HideIfAttribute:条件隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上隐藏验证条件结果值为true的对象字段。
3.包含字段:如下所示:
3.1.Condition:该字段表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会隐藏对象字段;否则就会显示对象字段。
3.2.Animate:该字段值为true时,对象字段就具有淡入淡出效果;否则对象字段就没有淡入淡出效果。
3.3.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。

HideIfGroupAttribute:条件隐藏组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上隐藏验证条件结果值为true的一组对象字段。
3.包含属性:如下所示:
3.1.Condition:该属性表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会隐藏相同组名的对象字段;否则就会显示相同组名的对象字段。
3.2.Animate:该属性值为true时,对象字段就具有淡入淡出效果;否则对象字段就没有淡入淡出效果。
4.包含字段:如下所示:
4.1.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。
5.包含函数:如下所示:
5.1.CombineValuesWith:将当前条件隐藏组与指定参数代表的条件隐藏组进行组合。
6.注意事项:如下所示:
6.1.当不指定Condition属性时,该Condition属性值默认等于组名。

HideDuplicateReferenceBoxAttribute:隐藏重复引用框体定制特性。
1.使用范围:只能用在引用类型的对象字段上。
2.主要作用:在检视面板上将具有相同引用值的对象字段进行隐藏框体处理。同一个对象字段的内部进行递归引用时,就不会进行隐藏框体处理。

HideInEditorModeAttribute:非播放模式隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在非播放模式下隐藏对象字段。

HideInPlayModeAttribute:播放模式隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在播放模式下隐藏对象字段。

HideInNonPrefabsAttribute:非预制体隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在非预制体上面时,就会隐藏该对象字段。

HideInPrefabsAttribute:预制体隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体上面时,就会隐藏该对象字段。

HideInPrefabAssetsAttribute:预制体资源隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体资源上面时,就会隐藏该对象字段。

HideInPrefabInstancesAttribute:预制体实例隐藏定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的组件在预制体实例上面时,就会隐藏该对象字段。

HorizontalGroupAttribute:水平组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上将具有相同组名的对象字段进行水平分组。
3.包含字段:如下所示:
3.1.Title:在水平组上方添加标题,标题内容为该字段值。
3.2.Width:该字段值表示对象字段的宽度值。当该字段值介于0和1之间时,对象字段就会按照百分比的方式进行摆放;当该字段值等于0时,对象字段就会按照自适应的方式进行摆放;当该字段值大于1时,对象字段就会按照像素的方式进行摆放。
3.3.MinWidth:该字段值表示对象字段的最小宽度值。
3.4.MaxWidth:该字段值表示对象字段的最大宽度值。
3.5.PaddingLeft:该字段值表示对象字段的左侧边缘到内容之间的填充值。当该字段值介于0和1之间时,对象字段就会按照百分比的方式进行向左填充;当该字段值等于0时,对象字段就会忽略向左填充;当该字段值大于1时,对象字段就会按照像素的方式进行向左填充。
3.6.PaddingRight:该字段值表示对象字段的右侧边缘到内容之间的填充值。当该字段值介于0和1之间时,对象字段就会按照百分比的方式进行向右填充;当该字段值等于0时,对象字段就会忽略向右填充;当该字段值大于1时,对象字段就会按照像素的方式进行向右填充。
3.7.MarginLeft:该字段值表示对象字段的起始点到左侧边缘的填充值。当该字段值介于0和1之间时,对象字段就会按照百分比的方式进行向左填充;当该字段值等于0时,对象字段就会忽略向左填充;当该字段值大于1时,对象字段就会按照像素的方式进行向左填充。
3.8.MarginRight:该字段值表示对象字段的起始点到右侧边缘的填充值。当该字段值介于0和1之间时,对象字段就会按照百分比的方式进行向右填充;当该字段值等于0时,对象字段就会忽略向右填充;当该字段值大于1时,对象字段就会按照像素的方式进行向右填充。
3.9.LabelWidth:该字段值表示对象字段名称到对象字段数值之间的距离。当该字段值为0时,距离就会进行自适应。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前水平组与指定参数代表的水平组进行组合。
5.注意事项:如下所示:
5.1.当指定了MinWidth字段或者MaxWidth字段时,Width字段值就等于MinWidth字段和MaxWidth字段的最大值。

InlineEditorAttribute:内联编辑器定制特性。
1.使用范围:可以用在Unity.Object派生类型的对象字段上。
2.主要作用:在检视面板上绘制一个内联编辑器(内部包含:对象字段、对象字段的子属性、对象字段的标题、对象字段的预览)。
3.构造函数:如下所示:
3.1.有参构造函数:通过InlineEditorModes类型参数和InlineEditorObjectFieldModes类型参数来设置内联编辑器的显示。
3.1.1.InlineEditorModes类型用来控制内联编辑器中哪部分成员进行绘制。如下所示:
3.1.1.1.GUIOnly:只显示对象字段的子属性。
3.1.1.2.GUIAndHeader:显示对象字段的子属性以及对象字段的标题。
3.1.1.3.GUIAndPreview:在左侧显示对象字段的子属性;在右侧显示对象字段的小型预览。
3.1.1.4.SmallPreview:只显示对象字段的小型预览。
3.1.1.5.LargePreview:只显示对象字段的大型预览。
3.1.1.6.FullEditor:在左侧显示对象字段的子属性和对象字段的标题;在右侧显示对象字段的小型预览。
3.1.2.InlineEditorObjectFieldModes类型用来控制内联编辑器中对象字段的绘制方式。如下所示:
3.1.2.1.Boxed:按照盒子方式绘制对象字段。
3.1.2.2.Foldout:按照折页方式绘制对象字段。
3.1.2.3.Hidden:当对象字段不为空时,就隐藏对象字段。
3.1.2.4.CompletelyHidden:无论对象字段是否为空,都会隐藏对象字段。
4.包含属性:如下所示:
4.1.Expanded:该属性值为true时,内联编辑器就会自动展开;否则就会收起。
4.2.ExpandedHasValue :当Expanded属性有设置值时,该属性值为true;否则该属性值为false。
5.包含字段:如下所示:
5.1.DrawGUI:该字段值为true时,内联编辑器就显示对象字段的子属性;否则就不显示对象字段的子属性。
5.2.DrawHeader:该字段值为true时,内联编辑器就显示对象字段的标题;否则就不显示对象字段的标题。
5.3.DrawPreview:该字段值为true时,内联编辑器就显示对象字段的预览;否则就不显示对象字段的预览。
5.4.PreviewHeight:该字段只有在DrawGUI字段值为false且DrawPreview字段值为true时才有效。该字段值就表示预览的高度值。
5.5.PreviewWidth:该字段只有在DrawGUI字段值为true且DrawPreview字段值为true时才有效。该字段值乘以2得到的数值就表示预览的宽度和高度值。
5.6.DisableGUIForVCSLockedAssets:当对象字段对应的资源被版本控制工具锁定时,就设置GUI.enabled = false;否则就设置GUI.enabled = true。
5.7.ObjectFieldMode:跟有参构造函数中的InlineEditorObjectFieldModes类型参数一样。

InlineButtonAttribute:内联按钮定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在对象字段的末尾添加一个按钮。
3.包含字段:如下所示:
3.1.Label:该字段值为null时,按钮显示文本就为Action字段值;否则按钮显示文本就为该字段值。
3.2.ShowIf:该字段值表示按钮显示条件,支持成员引用和属性表达式。
3.3.Action:该字段值通常由表达式或者函数组成,用来表示单击按钮时要执行的操作。

InlinePropertyAttribute:内联属性定制特性。
1.使用范围:只能用在自定义类型的对象字段上。
2.主要作用:首先隐藏折叠按钮;然后将自定义类型当中的成员显示到对象字段名称的旁边。
3.包含字段:如下所示:
3.1.LabelWidth:该字段值表示自定义类型当中的成员名称的宽度值。

IndentAttribute:缩进定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上将对象字段按照指定的缩进级别进行移动。
3.包含字段:如下所示:
3.1.IndentLevel:该字段值表示缩进级别。
4.注意事项:如下所示:
4.1.一个缩进级别等于4个空格。
4.2.缩进级别为正数时,就会向右移动对象字段;缩进级别为负数时,就会向左移动对象字段;缩进级别为0时,就不会移动对象字段。

InfoBoxAttribute:消息框定制特性。
1.使用范围:可以用在任意类型的对象字段上。
2.主要作用:首先在检视面板上创建一个消息框;然后通过该消息框向用户传达消息内容。
3.包含字段:如下所示:
3.1.Message:该字段值表示消息框的显示内容,支持成员引用和属性表达式。
3.2.InfoMessageType:该字段值表示消息框的显示类型。包含的类型如下所示:
3.2.1.Error:错误类型。
3.2.2.Warning:警告类型。
3.2.3.Info:信息类型。
3.2.4.None:通用类型。
3.3.VisibleIf:该字段值(可以为成员字段名称、成员属性名称、成员函数名称)表示是否显示消息框。
3.4.GUIAlwaysEnabled:该字段值表示消息框是否无视GUI.enable。

LabelTextAttribute:标签文本定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板中设置对象字段标签文本(默认为对象字段的名称)。
3.包含字段:如下所示:
3.1.Text:该字段值表示标签文本,支持成员引用和属性表达式。
3.2.NicifyText:该字段值表示标签文本是否进行裁剪。如:过滤掉_等。

LabelWidthAttribute:标签宽度定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板中设置对象字段标签文本到对象字段数值之间的距离。
3.包含字段:如下所示:
3.1.Width:当该字段值为0时,距离就会进行自适应;否则距离就为指定字段值。

ListDrawerSettingsAttribute:列表绘制设置定制特性。
1.使用范围:只能用在列表类型、数组类型的对象字段上。
2.主要作用:在检视面板中自定义数组、列表的行为。
3.包含字段:如下所示:
3.1.HideAddButton:该字段值为true时,标题工具栏上的添加按钮就被隐藏;否则标题工具栏上的添加按钮就被显示。
3.2.AddCopiesLastElement:该字段值为true时,添加条目的默认数值就等于上个条目的数值;否则添加条目的默认数值就等于"default(条目类型)"。
3.3.AlwaysAddDefaultValue:该字段值为true时,点击标题工具栏上的添加按钮就会隐藏对象选择器和类型选择器,并且条目的默认数值始终等于"default(条目类型)";否则点击标题工具栏上的添加按钮就会显示对象选择器和类型选择器,并且条目的默认数值等于从选择器中选择的数值。
3.4.CustomAddFunction:该字段值用来覆盖添加按钮的默认行为。
3.5.CustomRemoveElementFunction:该字段值用来覆盖删除按钮的默认行为,其中参数值为条目数值。
3.6.CustomRemoveIndexFunction:该字段值用来覆盖删除按钮的默认行为,其中参数值为条目索引。
3.7.ElementColor:该字段值用来设置条目的颜色值,可以为函数名称(返回类型为Color,参数类型为int index或者Color defaultColor)或者属性表达式。
3.8.HideRemoveButton:该字段值为true时,列表项上的移除按钮就被隐藏;否则列表项上的移除按钮就被显示。
3.9.ListElementLabelName:该字段值表示用条目类型中的指定名称成员的数值来绘制条目的标签。
3.10.OnBeginListElementGUI:该字段值表示在绘制条目之前调用的响应函数(参数为int index,返回类型为void)。
3.11.OnEndListElementGUI:该字段值表示在绘制条目之后调用的响应函数(参数为int index,返回类型为void)。
4.包含属性:如下所示:
4.1.DraggableItems:该属性值为true时,条目就可以拖动;否则条目就不可以拖动。
4.2.DraggableHasValue:该属性值表示是否DraggableItems属性被设置。
4.3.Expanded:该属性值为true时,默认情况下列表就会展开;否则默认情况下列表就会收起。
4.4.ExpandedHasValue:该属性值表示是否Expanded属性被设置。
4.5.IsReadOnly:该属性值表示是否为只读(不能添加条目、移除条目、拖动条目等)列表。
4.6.IsReadOnlyHasValue:该属性值表示是否IsReadOnly属性被设置。
4.7.NumberOfItemsPerPage:该属性值表示每页包含条目的个数。
4.8.NumberOfItemsPerPageHasValue:该属性值表示是否NumberOfItemsPerPage属性被设置。
4.9.OnTitleBarGUI:该属性值表示在标题栏上面添加自定义GUI,可以为函数名称或者属性表达式。
4.10.ShowPaging:该属性值表示是否开启分页。
4.11.PagingHasValue:该属性值表示是否ShowPaging属性被设置。
4.12.ShowIndexLabels:该属性值表示是否为每个条目绘制一个索引标签。
4.13.ShowIndexLabelsHasValue:该属性值表示是否ShowIndexLabels属性被设置。
4.14.ShowItemCount:该属性值表示是否显示条目总数。
4.15.ShowItemCountHasValue:该属性值表示是否ShowItemCount属性被设置。
5.注意事项:如下所示:
5.1.可以将项目视图中的多个资源一次性的拖动到列表中指定的位置。
5.2.将RangeAttribute定制特性应用到列表或者数组上时,所有条目都会显示成一个区间范围的滑动条。

MultiLinePropertyAttribute:多行属性定制特性。
1.使用范围:可以用在string类型的对象字段上。
2.主要作用:在对象字段旁边绘制一个多行文本框,用户可以通过编辑该多行文本框来设置对象字段数值。
3.构造函数:如下所示:
3.1.有参构造函数:通过参数值来设置Lines字段值。
4.包含字段:如下所示:
4.1.Lines:该字段值表示多行文本框的可视行数。

MinValueAttribute:最小值定制特性。
1.使用范围:可以用在基础数值类型、向量类型的对象字段上。
2.主要作用:在检视面板上将对象字段的显示值限制为大于等于最小值。
3.包含字段:如下所示:
3.1.MinValue:该字段值表示最小值。
3.2.Expression:该字段值表示最小值解析字符串,可以为成员(字段、属性、函数名称)引用以及属性表达式。

MaxValueAttribute:最大值定制特性。
1.使用范围:可以用在基础数值类型、向量类型的对象字段上。
2.主要作用:在检视面板上将对象字段的显示值限制为小于等于最大值。
3.包含字段:如下所示:
3.1.MaxValue:该字段值表示最大值。
3.2.Expression:该字段值表示最大值解析字符串,可以为成员(字段、属性、函数名称)引用以及属性表达式。

MinMaxSliderAttribute:最小值最大值滑块定制特性。
1.使用范围:可以用在Vector2、Vector2Int类型的对象字段上。
2.主要作用:首先在检视面板上绘制一个左右滑块;然后左滑块的最左侧表示最小值,右滑块的最右侧表示最大值;最后用户可以拖动左滑块来指定对象字段的x分量值,拖动右滑块来指定对象字段的y分量值。
3.包含字段:如下所示:
3.1.MaxValue:该字段值表示最大值。
3.2.MaxValueGetter:该字段值表示最大值解析字符串,可以为成员(字段、属性、函数名称)引用以及属性表达式。
3.3.MinValue:该字段值表示最小值。
3.4.MinValueGetter:该字段值表示最小值解析字符串,可以为成员(字段、属性、函数名称)引用以及属性表达式。
3.5.MinMaxValueGetter:该字段值表示最小值和最大值解析字符串,可以为成员(字段、属性、函数名称)引用以及属性表达式。
3.6.ShowFields:该字段值表示是否在左右滑块的两侧绘制对象字段x分量值和对象字段y分量值。

OnCollectionChangedAttribute:集合更改定制特性。
1.使用范围:只能用在集合类型(如:数组、列表、字典、哈希集、堆栈、链表)的对象字段上。
2.主要作用:更改对象字段之前和之后都会调用事件回调。
3.包含字段:如下所示:
3.1.Before:该字段值表示更改对象字段之前调用的事件回调。
3.2.After:该字段值表示更改对象字段之后调用的事件回调。
4.注意事项:如下所示:
4.1.该定制特性只有在检视面板中更改对象字段时才有效。
4.2.事件回调中包含一个CollectionChangeInfo类型参数,用来记录完整的操作信息。

OnInspectorDisposeAttribute:检视面板释放绘制定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:在检视面板中释放成员的绘制时,就会执行指定的操作。
3.包含字段:如下所示:
3.1.Action:该字段值表示需要执行的操作字符串,可以是函数名称或者属性表达式。

OnInspectorInitAttribute:检视面板初始化绘制定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:在检视面板中初始化成员的绘制时,就会执行指定的操作。
3.包含字段:如下所示:
3.1.Action:该字段值表示需要执行的操作字符串,可以是函数名称或者属性表达式。

OnInspectorGUIAttribute:检视面板界面绘制定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:在检视面板中绘制成员时,就会执行指定的操作。
3.包含字段:如下所示:
3.1.Prepend:该字段值表示绘制成员之前需要执行的操作字符串,可以是函数名称或者属性表达式。
3.2.Append:该字段值表示绘制成员之后需要执行的操作字符串,可以是函数名称或者属性表达式。
4.注意事项:如下所示:
4.1.使用无参构造函数版本的定制特性时,通常将其用到函数上,利用函数内部的绘制代码来决定最终的显示。

OnStateUpdateAttribute:状态更新定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:当对象字段的状态发生更新时,就会在当前帧里面至少执行一次指定的操作。
3.包含字段:如下所示:
3.1.Action:该字段值表示需要执行的操作字符串,可以是函数名称或者属性表达式。

OnValueChangedAttribute:数值改变定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段或者对象属性上。
2.主要作用:当对象字段或者对象属性的数值在检视面板中发生改变时,就会执行指定的操作。
3.包含字段:如下所示:
3.1.Action:该字段值表示需要执行的操作字符串,可以是函数名称或者属性表达式。
3.2.IncludeChildren:当对象字段或者对象属性的子元素的数值发生改变并且该字段值为true,就会执行Action字段。
3.3.InvokeOnInitialize:该字段值表示是否在初始化(如:第一次打开检视面板、第一次展开折页、类型或者父类型发生更改、强制重新生成等)对象字段或者对象属性时,执行一次Action字段。
3.4.InvokeOnUndoRedo:该字段值表示是否在撤销(Ctrl + Z)或者重做(Ctrl + Y)对象字段或者对象属性时,执行一次Action字段。

PreviewFieldAttribute:预览区域定制特性。
1.使用范围:可以用在Unity类型的对象字段上。
2.主要作用:首先在检视面板中绘制一个方形区域;然后使用该方形区域来预览对象字段。
3.构造函数:如下所示:
3.1.无参构造函数:设置Height字段值为0;Alignment属性值为左对齐。
3.2.有参构造函数:通过参数值来设置Height字段值以及Alignment属性值。
4.包含字段:如下所示:
4.1.Height:该字段值小于0时,预览区域就不可见。该字段值等于0时,预览区域高度值就默认为50。该字段值大于0时,预览区域高度值就等于该字段值。
5.包含属性:如下所示:
5.1.Alignment:该属性值表示预览区域的对齐(左对齐、右对齐、居中对齐)方式。
5.2.AlignmentHasValue:当Alignment属性没有被赋值时,该属性值为false;否则该属性值为true。
6.注意事项:如下所示:
6.1.可以在工程目录里面直接将资源拖拽到预览区域。
6.2.可以通过拖拽操作来互换两个预览区域之间的资源。
6.3.可以通过Ctrl + 拖拽操作来替换其他预览区域中的资源。
6.4.可以通过Ctrl + 鼠标单击操作来删除预览区域中的资源。

PropertyOrderAttribute:属性排序定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:用来定义对象字段在检视面板中的绘制顺序。
3.构造函数:如下所示:
3.1.无参构造函数:设置Order字段值为0。
3.2.有参构造函数:通过参数值来设置Order字段值。
4.包含字段:如下所示:
4.1.Order:该字段值表示对象字段的排序值。其中排序值越小,对象字段的绘制优先级就越高。当排序值相同时,先定义的对象字段的绘制优先级就越高。

PropertySpaceAttribute:属性间距定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段或者对象属性上。
2.主要作用:用来定义对象字段或者对象属性在检视面板中的绘制坐标。
3.构造函数:如下所示:
3.1.无参构造函数:设置SpaceBefore字段值为8以及SpaceAfter字段值为0。
3.2.单参构造函数:设置SpaceBefore字段值为参数值以及SpaceAfter字段值为0。
3.3.两参构造函数:通过参数值来设置SpaceBefore字段以及SpaceAfter字段。
4.包含字段:如下所示:
4.1.SpaceBefore:该字段值表示当前对象字段或者对象属性距离上一个对象字段或者对象属性的距离。
4.2.SpaceAfter:该字段值表示当前对象字段或者对象属性距离下一个对象字段或者对象属性的距离。

PropertyTooltipAttribute:属性工具提示定制特性。
1.使用范围:可以用在任何类型的对象字段或者对象属性上。
2.主要作用:当鼠标滑动到对象字段或者对象属性上时,就会弹出工具提示。
3.包含字段:如下所示:
3.1.Tooltip:该字段表示工具提示文本内容,支持成员引用和属性表达式。

ProgressBarAttribute:进度条定制特性。
1.使用范围:可以用在基础数据类型的对象字段上。
2.主要作用:在检视面板中绘制一个进度条,其中进度条的最左侧为最小值,进度条的最右侧为最大值,进度条的填充条为对象字段的当前值。
3.包含字段:如下所示:
3.1.Min:该字段值表示最小值。
3.2.MinGetter:该字段值表示最小值解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.3.Max:该字段值表示最大值。
3.4.MaxGetter:该字段值表示最大值解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.5.R:该字段值表示填充条颜色中的红色分量值。
3.6.G:该字段值表示填充条颜色中的绿色分量值。
3.7.B:该字段值表示填充条颜色中的蓝色分量值。
3.8.ColorGetter:该字段值表示填充条颜色解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.9.BackgroundColorGetter:该字段值表示背景框颜色解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.10.Height:该字段值(默认为12像素)表示进度条的高度像素值。
3.11.CustomValueStringGetter:该字段值表示填充文本解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.12.Segmented:该字段值表示是否以平铺的方式绘制进度条。
4.包含属性:如下所示:
4.1.Color:该属性值表示获取填充条的颜色值。
4.2.DrawValueLabel:该属性值表示是否显示填充文本。
4.3.DrawValueLabelHasValue:该属性值表示是否设置了DrawValueLabel属性。
4.4.ValueLabelAlignment:该属性值表示填充文本的对齐方式(向左对齐、向右对齐、居中对齐)。
4.5.ValueLabelAlignmentHasValue:该属性值表示是否设置了ValueLabelAlignment属性。

PropertyRangeAttribute:属性区间定制特性。
1.使用范围:可以用在基础数据类型的对象字段或者对象属性上。
2.主要作用:首先在检视面板中创建一个滑块;然后滑块的最左侧表示最小值,滑块的最右侧表示最大值;最后用户通过滑块来设置对象字段或者对象属性的数值。
3.包含字段:如下所示:
3.1.Min:该字段值表示最小值。
3.2.MinGetter:该字段值表示最小值解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。
3.3.Max:该字段值表示最大值。
3.4.MaxGetter:该字段值表示最大值解析字符串,可以为成员(字段、属性、函数名称)引用和属性表达式。

ReadOnlyAttribute:只读定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:禁止在检视面板中修改对象字段的数值,但是仍然可以在代码中修改对象字段的数值。

RequiredAttribute:要求定制特性。
1.使用范围:可以用在引用类型的对象字段上。
2.主要作用:当对象字段值为null或者对象字段中存在值为null的条目时,就会在检视面板上绘制一个消息框。
3.构造函数:如下所示:
3.1.无参构造函数:设置ErrorMessage字段值为"对象字段名称或者条目索引值 is required"以及MessageType字段值为错误消息框类型。
3.2.单参构造函数:设置ErrorMessage字段值为参数值以及MessageType字段值为错误消息框类型;或者设置ErrorMessage字段值为"对象字段名称或者条目索引值 is required"以及MessageType字段值为参数值。
3.3.双参构造函数:通过参数值来设置MessageType字段值以及ErrorMessage字段值。
4.包含字段:如下所示:
4.1.MessageType:该字段值表示消息框类型(警告类型,信息类型,错误类型,未知类型)。当字段值为未知消息框类型时,最终Odin还是会按照信息消息框类型进行处理。
4.2.ErrorMessage:该字段值表示消息框内容,支持成员引用和属性表达式。

ResponsiveButtonGroupAttribute:响应按钮组定制特性。
1.使用范围:只能用在函数上。
2.主要作用:在检视面板中将具有相同组名的按钮分到一个组中。该组会根据可用的布局空间来自动调整每个按钮的位置和大小。
3.包含字段:如下所示:
3.1.DefaultButtonSize:该字段表示默认的按钮大小。具有以下选项:
3.1.1.Small:按钮的高度值固定为16像素;按钮的宽度值将根据可用的布局空间进行自动调整。
3.1.2.Medium:按钮的高度值固定为20像素;按钮的宽度值将根据可用的布局空间进行自动调整。
3.1.3.Large:按钮的高度值固定为30像素;按钮的宽度值将根据可用的布局空间进行自动调整。
3.1.4.Gigantic:按钮的高度值固定为60像素;按钮的宽度值将根据可用的布局空间进行自动调整。
3.2.UniformLayout:当该字段值为true时,则一组按钮的宽度值将相同。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前响应按钮组与指定参数代表的响应按钮组进行组合。

RangeAttribute:Unity区间定制特性。
1.使用范围:可以用在基础数据类型的对象字段上。
2.主要作用:首先在检视面板中创建一个滑块;然后滑块的最左侧表示最小值,滑块的最右侧表示最大值;最后用户通过滑块来设置对象字段的数值。
3.包含字段:如下所示:
3.1.min:该字段值表示最小值。
3.2.max:该字段值表示最大值。

SceneObjectsOnlyAttribute:场景对象定制特性。
1.使用范围:可以用在Unity类型的对象字段上。
2.主要作用:将对象字段的数据限定为场景对象。

ShowIfAttribute:条件显示定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上显示验证条件结果值为true的对象字段。
3.包含字段:如下所示:
3.1.Condition:该字段表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会显示对象字段;否则就会隐藏对象字段。
3.2.Animate:该字段值为true时,对象字段就具有淡入淡出效果;否则对象字段就没有淡入淡出效果。
3.3.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。

ShowIfGroupAttribute:条件显示组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上显示验证条件结果值为true的一组对象字段。
3.包含属性:如下所示:
3.1.Condition:该属性表示验证条件,支持成员(字段或者属性或者函数等)引用和属性表达式。当验证条件结果值为true时,就会显示相同组名的对象字段;否则就会隐藏相同组名的对象字段。
3.2.Animate:该属性值为true时,对象字段就具有淡入淡出效果;否则对象字段就没有淡入淡出效果。
4.包含字段:如下所示:
4.1.Value:当验证条件可选值等于该字段值时,验证条件结果值就为true;否则验证条件结果值就为false。
5.包含函数:如下所示:
5.1.CombineValuesWith:将当前条件显示组与指定参数代表的条件显示组进行组合。
6.注意事项:如下所示:
6.1.当不指定Condition属性时,该Condition属性值默认等于组名。

ShowInInspectorAttribute:在检视面板中显示定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:在检视面板中显示成员及其数值。

ShowInInlineEditorsAttribute:内联编辑器显示定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:如果包含该对象字段的类型应用了InlineEditorAttribute定制特性时,就会显示该对象字段。

ShowDrawerChainAttribute:显示绘制链定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段或者对象属性上。
2.主要作用:在检视面板上绘制对象字段或者对象属性时,就列举出绘制链(也就是所有相关联的绘制步骤)。
3.注意事项:如下所示:
3.1.该定制特性主要用在调试对象字段或者对象属性的绘制流程。
3.2.自定义的绘制用绿色显示;没有用到的绘制用灰色显示。

ShowPropertyResolverAttribute:显示属性解析器定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段或者对象属性上。
2.主要作用:在检视面板上显示将对象字段或者对象属性引入到属性树的属性解析器。
3.注意事项:如下所示:
3.1.该定制特性主要用在调试对象字段或者对象属性的显示时机(如:不显示突然变成显示)。

SearchableAttribute:可搜索定制特性。
1.使用范围:既可以用在数组类型、列表类型、自定义引用类型的对象字段上;也可以直接用在自定义引用类型上。
2.主要作用:在检视面板中添加一个搜索筛选器。可以在应用该定制特性的目标身上通过该筛选器来搜索子级。
3.包含字段:如下所示:
3.1.FilterOptions:该字段值(默认值为All)表示使用筛选项进行搜索。当字段值为ISearchFilterableInterface时,就会调用子级(继承自ISearchFilterable接口)中的IsMatch函数进行搜索。
3.2.FuzzySearch:该字段值(默认值为true)表示是否使用模糊字符串匹配进行搜索。
3.3.Recursive:该字段值(默认值为true)表示是否使用递归进行搜索。

SuffixLabelAttribute:后缀标签定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在对象字段数值的里面或者后面绘制一个标签。
3.包含字段:如下所示:
3.1.Label:该字段值表示标签的显示内容,支持成员引用和属性表达式。
3.2.Overlay:该字段值为true时,就在对象字段数值的里面绘制一个标签;否则就在对象字段数值的后面绘制一个标签。

SpaceAttribute:Unity间距定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:用来定义对象字段在检视面板中的绘制坐标。
3.包含字段:如下所示:
3.1.height:该字段值(默认值为8)表示当前对象字段距离上一个对象字段的距离。

SuppressInvalidAttributeErrorAttribute:抑制无效属性错误定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:当某个定制特性应用到错误的数值时,就会在检视面板上隐藏错误信息。

TableListAttribute:表格列表定制特性。
1.使用范围:可以用在数组类型、列表类型的对象字段上。
2.主要作用:将对象字段的数据按照表格或者平铺的方式进行绘制。
3.包含字段:如下所示:
3.1.AlwaysExpanded:该字段值为true时,表格工具栏就会隐藏伸缩按钮;否则表格工具栏就会显示伸缩按钮。
3.2.CellPadding:表格条目的单元格填充总高度等于该字段值乘以4。
3.3.IsReadOnly:该字段值为true时,就会隐藏添加和删除表格条目的按钮;该字段值为false时,就会显示添加和删除表格条目的按钮。
3.4.HideToolbar:该字段值为true时,就会隐藏表格工具栏;该字段值为false时,就会显示表格工具栏。
3.5.DrawScrollView:该字段值为true并且可视高度大于0并且滚动高度大于可视高度时,就将所有表格条目绘制到滚动列表中。
3.6.MinScrollViewHeight:该字段值表示表格条目滚动列表的最小可视高度。
3.7.MaxScrollViewHeight:该字段值表示表格条目滚动列表的最大可视高度。
3.8.NumberOfItemsPerPage:该字段值表示每页表格条目的个数。
3.9.ShowIndexLabels:该字段值为true时,就会显示表格条目索引;该字段值为false时,就会隐藏表格条目索引。
3.10.DefaultMinColumnWidth:该字段值表示所有表格列的默认最小宽度值,并且可以通过TableColumnWidthAttribute定制特性来重写某个表格列的宽度值。
4.包含属性:如下所示:
4.1.ScrollViewHeight:用来设置MinScrollViewHeight字段值和MaxScrollViewHeight字段值等于该属性值以及获取Min(MinScrollViewHeight,MaxScrollViewHeight)。
4.2.ShowPaging:当该属性值为true时,表格工具栏上就会显示分页按钮;否则表格工具栏上就不会显示分页按钮。
4.3.ShowPagingHasValue:当ShowPaging属性有设置数值时,该属性值为true;否则该属性值为false。
5.注意事项:如下所示:
5.1.当MaxScrollViewHeight字段值为0时,表格条目滚动列表的可视高度就等于0;否则表格条目滚动列表的可视高度就等于2乘以Max(MinScrollViewHeight,MaxScrollViewHeight)。

TableColumnWidthAttribute:表格列宽定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:和TableListAttribute定制特性配合使用,用来自定义对象字段对应表格列的宽度值。
3.构造函数:如下所示:
3.1.有参构造函数:用来设置Width字段值和Resizable字段值。
4.包含字段:如下所示:
4.1.Width:该字段值表示表格列的宽度值。
4.2.Resizable:该字段值为true时,表格列的宽度值会随着检视面板进行自动调整。该字段值为false时,表格列的宽度值就固定为Width字段值。

TableMatrixAttribute:表格矩阵定制特性。
1.使用范围:只可以用在二维数组类型(元素为基础类型或者Unity类型)的对象字段上。
2.主要作用:用来进一步指定Odin如何绘制二维数据。
3.包含字段:如下所示:
3.1.DrawElementMethod:该字段值用来指定调用哪个函数来绘制表格的每个单元格。
3.2.HideRowIndices:该字段值为true时,就会隐藏垂直行索引;否则就会显示垂直行索引。
3.3.HideColumnIndices:该字段值为true时,就会隐藏水平列索引;否则就会显示水平列索引。
3.4.HorizontalTitle:该字段值表示水平列标题。
3.5.VerticalTitle:该字段值表示垂直行标题。
3.6.IsReadOnly:该字段值为true时,就不能对表格的行或者列执行插入、删除、拖拽操作;否则就可以执行上述操作。
3.7.RowHeight:该字段值小于0时,就会隐藏单元格。该字段值等于0时,单元格的高度值就默认为20。该字段值大于0时,单元格的高度值就等于该字段值。
3.8.SquareCells:该字段值为true时,单元格就为正方形,此时每行单元格的宽高值就等于第一个单元格的宽度值。该字段值为false时,单元格就是长方形,此时每行单元格的宽高值就等于第一个单元格的宽高值。
3.9.Transpose:该字段值为true时,表格的行列就会互换;否则表格的行列就不会互换。
3.10.ResizableColumns:该字段值为true时,表示可以通过鼠标来调整单元格的宽度;否则就不能通过鼠标来调整单元格的宽度。
3.11.RespectIndentLevel:绘制的表格是否符合当前GUI缩进级别。

ToggleLeftAttribute:向左切换定制特性。
1.使用范围:可以用在布尔类型的对象字段或者对象属性上。
2.主要作用:在对象字段或者对象属性的名称前面绘制一个复选框。

ToggleAttribute:切换定制特性。
1.使用范围:只能用在单个自定义类型的对象字段上。
2.主要作用:在检视面板中创建一个切换选项,通过该切换选项来开启或者禁用对象字段。
3.构造函数:如下所示:
3.1.有参构造函数:通过参数值来设置ToggleMemberName字段值。
4.包含字段:如下所示:
4.1.ToggleMemberName:该字段值关联到对象字段中的一个公有非静态布尔类型成员变量的名称。
4.2.CollapseOthersOnExpand:当该字段值为true时,就会在打开切换组选项时将该切换选项自动收缩。

ToggleGroupAttribute:切换组定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:在检视面板中创建一个切换组选项,通过该切换组选项来开启或者禁用一组对象字段。
3.构造函数:如下所示:
3.1.有参构造函数:通过参数值来设置ToggleGroupTitle字段、ToggleMemberName属性以及order字段。
4.包含属性:如下所示:
4.1.ToggleMemberName:该字段值关联到一组对象字段中的一个公有非静态布尔类型成员变量的名称。
5.包含字段:如下所示:
5.1.ToggleGroupTitle:当该字段值为null时,切换组选项的标题就为ToggleMemberName属性值;否则切换组选项的标题就为该字段值。
5.2.CollapseOthersOnExpand:当该字段值为true时,就会在打开切换组选项时将其他切换组选项自动收缩。
6.包含函数:如下所示:
6.1.CombineValuesWith:将当前切换组选项与指定参数代表的切换组选项进行组合。

TitleAttribute:标题(包含主标题和子标题)定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:用来在成员上方创建标题。
3.包含字段:如下所示:
3.1.Bold:该字段值表示是否以粗体显示主标题。
3.2.HorizontalLine:该字段值表示是否在标题下方绘制水平线。
3.3.Title:该字段值表示主标题的显示内容。
3.4.Subtitle:该字段值表示子标题的显示内容。
3.5.TitleAlignment:该字段值表示标题的对齐方式。如下所示:
3.5.1.Left:标题向左对齐。
3.5.2.Right:标题向右对齐。
3.5.3.Centered:标题居中对齐。
3.5.4.Split:主标题向左对齐,子标题向右对齐。

TitleGroupAttribute:标题组定制特性。
1.使用范围:可以用在任何成员上。
2.主要作用:在检视面板中创建一个标题组。该标题组包含主标题,可选子标题,可选水平分割线以及具有相同组名的成员。
3.包含字段:如下所示:
3.1.Indent:该字段值表示是否缩进显示成员。
3.2.HorizontalLine:该字段值表示是否在标题下方绘制水平线。
3.3.BoldTitle:该字段值表示是否粗体显示主标题。
3.4.Subtitle:该字段值表示子标题的显示内容。
3.5.Alignment:该字段值表示标题的对齐方式。如下所示:
3.5.1.Left:标题向左对齐。
3.5.2.Right:标题向右对齐。
3.5.3.Centered:标题居中对齐。
3.5.4.Split:主标题向左对齐,子标题向右对齐。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前标题组与指定参数代表的标题组进行组合。

TabGroupAttribute:页签组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板中将具有相同组名的对象字段组织到一个页签组中。一个页签组中可以包含多个页签;每个页签下面可以包含多个对象字段。
3.包含字段:如下所示:
3.1.DEFAULT_NAME:该字段表示只读的默认组名称。
3.2.TabName:该字段表示页签的名称。
3.3.HideTabGroupIfTabGroupOnlyHasOneTab:该字段值为true时,当页签组中只有一个页签时,就会隐藏页签组;否则就会显示页签组。
3.4.Paddingless:当该字段值为true时,每页的内容将不会包含在任何边框里面;否则每页的内容将会包含在一个边框里面。
3.5.UseFixedHeight:当该字段值为true时,每页的高度将会相同;否则每页的高度可以不同。
4.包含属性:如下所示:
4.1.Tabs:获取页签组中所有的页签名称。
5.包含函数:如下所示:
5.1.CombineValuesWith:将当前页签组与指定参数代表的页签组进行组合。

TypeFilterAttribute:类型过滤器定制特性。
1.使用范围:可以用在自定义类型的对象字段上。
2.主要作用:首先通过指定的过滤器来获取类型列表;然后在检视面板中将类型列表绘制成一个下拉列表来供用户进行选择。
3.包含字段:如下所示:
3.1.FilterGetter:该字段值表示获取类型列表的过滤器(如函数名)。
3.2.DropdownTitle:该字段值(默认为null)表示下拉列表的标题。
3.3.DrawValueNormally:当该字段值为true时,就会在绘制下拉列表和数值;否则就只会绘制下拉列表。

TypeInfoBoxAttribute:类型消息框定制特性。
1.使用范围:可以用在任意类型上。
2.主要作用:在检视面板中显示类型的顶部绘制一个消息框。
3.包含字段:如下所示:
3.1.Message:该字段值表示消息框的显示内容。

TextAreaAttribute:Unity文本区域定制特性。
1.使用范围:可以用在string类型的对象字段上。
2.主要作用:首先在检视面板中绘制一个可滚动的文本区域;然后用户可以通过该文本区域来编辑对象字段。
3.包含字段:如下所示:
3.1.minLines:该字段值表示文本区域的最小可视行数。
3.2.maxLines:该字段值表示文本区域的最大可视行数。当对象字段的内容超过该字段值时,就会显示滚动条。

ValidateInputAttribute:验证输入定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板中验证用户输入不满足指定条件时,就会绘制一个消息框。
3.包含字段:如下所示:
3.1.DefaultMessage:当该字段值为null时,消息框的默认内容为"Value is invalid for 对象字段名";否则消息框的默认内容为该字段值。
3.2.MessageType:该字段值不指定时,消息框的默认类型为错误类型;否则消息框的默认类型为字段值。
3.3.Condition:该字段值表示验证条件。
3.3.1.格式如下所示:

访问权限 [static] bool 函数名(对象字段数据类型 field, ref string errorMessage, ref InfoMessageType? messageType)

3.3.2.特性如下所示:
3.3.2.1.返回值为false时,就表明用户输入不满足条件,此时就会绘制一个消息框;否则就表明用户输入满足条件,此时就不会绘制一个消息框。
3.3.2.2.errorMessage表示消息框的显示内容。
3.3.2.3.messageType表示消息框的显示类型。
3.4.IncludeChildren:该字段值(默认为true)表示子值发生更改时是否也触发验证。
3.5.ContinuousValidationCheck:该字段值(默认为false)为true时,就会在每帧或者更改值时调用一次验证条件;否则就在更改值时调用一次验证条件。

ValueDropdownAttribute:下拉列表定制特性。
1.使用范围:可以用在基础类型、Unity类型的对象字段上。
2.主要作用:创建一个带有可配置选项的下拉列表来供用户进行选择。
3.包含字段:如下所示:
3.1.AppendNextDrawer:该字段只有在对象字段为不为列表或者数组类型时才有效。当为true时,就会在对象字段旁边添加一个小按钮以及一个输入框,点击该小按钮就会弹出小型下拉列表;当为false时,就会在对象字段旁边添加一个宽型下拉列表。
3.2.DisableGUIInAppendedDrawer:该字段只有在对象字段为不为列表或者数组类型且AppendNextDrawer字段值为true时才有效。当该字段值为true时,输入框就不可以进行编辑;否则输入框就可以进行编辑。
3.3.DoubleClickToConfirm:当为true时,双击条目来关闭下拉列表;否则单击条目来关闭下拉列表。
3.4.DisableListAddButtonBehaviour:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,点击加号按钮就会直接添加一个默认条目;否则点击加号按钮就会弹出下拉列表供用户添加或者删除一个选项条目。
3.5.DrawDropdownForListElements:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,对象字段存储的每个元素都会显示成一个没有被占用数值组成的宽型下拉列表;否则对象字段存储的每个元素都会显示成一个可编辑的输入框。
3.6.DropdownHeight:当该字段值小于0时,下拉列表就不显示;当该字段值等于0时,下拉列表的高度就按照元素的个数进行自动调整;当该字段值大于0时,下拉列表的高度就等于该字段值。
3.7.DropdownWidth:当该字段值大于0时,下拉列表的宽度就等于该字段值乘以2。当该字段值小于等于0时,如果对象字段为列表或者数组类型,那么下拉列表的宽度就固定为800;否则下拉列表的宽度就自动调整。
3.8.DropdownTitle:当该字段值为null或者""时,下拉列表就不显示标题;否则下拉列表就显示标题且标题内容为该字段值。
3.9.ValuesGetter:该字段值用来替换构造函数中传入的参数值,并且具有和该参数值一样的作用:指明下拉列表的数据源是由哪个列表或者数组类型的变量来提供;或者是由哪个返回列表或者数组类型的函数来提供。
3.10.IsUniqueList:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,点击添加按钮打开下拉列表,此时不能添加重复的条目;否则就可以添加重复的条目。
3.11.ExcludeExistingValuesInList:该字段只有在对象字段为列表或者数组类型时才有效。当该字段值为true时,点击添加按钮打开下拉列表,此时已经选择的条目就会从下拉列表中移除;否则已经选择的条目就不会从下拉列表中移除。
3.12.FlattenTreeView:该字段值为false时,下拉列表中的条目会按照树形结构进行展示;否则就按照平铺方式进行展示。
3.13.ExpandAllMenuItems:该字段值只有在下拉列表按照树状结构进行展示时才有效。当该字段值为true时,每次打开下拉列表都会自动展开条目;否则就按照最近的展开方式来显示条目。
3.14.HideChildProperties:当该字段值为true时,对象字段的所有子属性会被隐藏起来;否则就会显示出来。
3.15.NumberOfItemsBeforeEnablingSearch:当该字段值大于等于0且下拉列表的条目个数大于等于该字段值时,就会在下拉列表的上方显示搜索框;否则就会在下拉列表的上方不显示搜索框。
3.16.SortDropdownItems:当该字段值为true时,就会对下拉列表的条目进行排序;否则就不会对下拉列表的条目进行排序。
4.自定义下拉列表条目:如下所示:
4.1.ValueDropdownItem:该类型表示下拉列表条目。其中Text字段表示条目名称;Value字段表示条目数值。
4.2.ValueDropdownList:由ValueDropdownItem类型所组成的列表类型。通常与ValueDropdownAttribute定制特性一起使用,从而自定义每个下拉列表条目。

VerticalGroupAttribute:垂直组定制特性。
1.使用范围:可以用在基础类型、自定义类型、Unity类型的对象字段上。
2.主要作用:在检视面板上将具有相同组名的对象字段进行垂直分组。通常与HorizontalGroupAttribute配合使用。
3.包含字段:如下所示:
3.1.PaddingTop:该字段值表示距离组顶部的像素距离。
3.2.PaddingBottom:该字段值表示距离组底部的像素距离。
4.包含函数:如下所示:
4.1.CombineValuesWith:将当前垂直组与指定参数代表的垂直组进行组合。

WrapAttribute:包裹定制特性。
1.使用范围:可以用在基础数据类型、Vector类型的对象字段上。
2.主要作用:当对象字段的数值超出了指定区间时,就会在检视面板上循环处理该对象字段的数值。
3.包含字段:如下所示:
3.1.Max:该字段值表示区间的最大值。
3.2.Min:该字段值表示区间的最小值。

猜你喜欢

转载自blog.csdn.net/zjz520yy/article/details/119940363