Unity插件之Odin 2.Inspector使用-BaseEditorChanges

Unity插件之Odin 2.Inspector使用-BaseEditorChanges

简介

项目中导入Odin成功后,在Odin的默认配置中会对Unity内的一部分类型使用Odin的绘制方式在属性面板中绘制,与Unity默认的绘制方式存在着很大的不同,主要的类型有:

  • Enum类型
  • Array类型
  • List类型
  • Quaternion类
  • Bounds类
  • Vector类
  • Rect类
  • UnityEngine.Object类

除了上述的类型变化外还有其它扩展的一些属性标签:

  • ListDrawerSettings
  • HideReferenceObjectPicker

PS:对于List和Array类型的变化尤其大,可以使用新的属性标签ListDrawerSettingsAttribute可以设置更加强大的功能

声明

本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。

如果您进行转载,请标明出处。

Unity插件之Odin 2.Inspector使用-BaseEditorChanges(http://www.liyubin.com/articles/2019/03/27/1553619690462.html)

Odin基础变化详解

  • Enum类型

    Odin会修改枚举的默认显示,会提供一个比Unity原生更加强大的下拉列表以供选择

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第1张图片
    Odin-Enum

    对于Flag类型的枚举同样适用,下拉列表会有一定的变化

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第2张图片
    Odin-FlagEnum
  • Array类型

    Odin会修改Array数组及List列表的显示方式,会提供更加强大的列表形式显示,在列表中可以添加、删除、调整排序等操作。

    由于对Array及List的支持变化很大,本文后面会专门进行介绍

  • List类型

    Odin会修改Array数组及List列表的显示方式,会提供更加强大的列表形式显示,在列表中可以添加、删除、调整排序等操作。

    由于对Array及List的支持变化很大,本文后面会专门进行介绍

  • Quaternion类

    Odin对四元数会以更加友好的方式显示,同时在右键菜单中添加了一些菜单,比如切换四元数使用欧拉角度表示、重置四元数等操作

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第3张图片
    Odin-Quaternion
  • Bounds类

    Odin对Bounds以Center和Extent两个Vector的方式进行显示,同时右键菜单中添加了一些菜单,可以方便操作Bounds

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第4张图片
    Odin-Bounds
  • Vector类

    Odin对Vector向量进行重新调整,当区域缩小时将会忽略各轴向文本的显示,同时在右键菜单中添加了一些菜单项,可以方便操作Vector

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第5张图片
    Odin-Vector

    PS:对于Vector3,Vector2,Vector4基本相同,所以此处使用Vector替换

  • Rect类

    Odin对Rect进行了调整,使用Position与Size进行显示,同时当区域缩小时会忽略各轴向的显示,同时在右键菜单中添加了一些菜单项,可以方便操作Rect

    Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第6张图片
    Odin-Rect
  • UnityEngine.Object类

    Odin对Unity中的Object类型的资源进行了调整,在字段绘制的尾部添加了一个笔形的小图标,通过点击此图标可以快速查看使用的资源属性面板,同时右键菜单增加了一些菜单项

    Odin-UnityObject

Odin对List及Array的影响

使用Unity自身编辑器显示Array与List时,无论是添加新元素,还是删除元素等都很难操作,但是Odin对List及Array的扩展是Odin的一大特色,Odin提供了非常的操作方式,可以方便的添加、删除、重新排序等操作。

使用Odin后List/Array的基本变化如:

Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第7张图片
Odin-List/Array

从图中可以看到,Odin将List/Array使用折叠列表的形式绘制,通过菜单栏中的+号可以方便添加新元素,使用每条元素后的X号可以快速删除元素,同时拖动元素条目可以快速调整位置。

如果对于Odin提供的默认的方式还是无法满足项目开发需求的话,Odin还提供了一个更大强的属性标签ListDrawerSettingsAttribute,可以详细的定制绘制方式。

ListDrawerSettingsAttribute

简介

在Odin中为List和Array在属性面板的中外观展示,增加了很多的扩展,使用ListDrawerSettings属性可以详细的定位属性展示的方式,本文将结合着ListDrawerSettingsAttribute属性与字段,介绍如何对List和Array的外观进行定义。

API详解

  • Fields(字段)

    类 型 定义名称 描 述
    bool AlwaysAddDefaultValue 如果值为TRUE,则添加新值时,将自动以default(T)的值自动填充给新添加的值
    string CustomAddFunction 指定一个方法名,用来覆盖对象添加时的行为。如果方法返回的是list类型,则将对每个选中的对象均调用一次,如果是void类型,则无论选择了多少个对象,仅调用一次
    bool HideAddButton 如果值为TRUE,在标题的工具条中将不会显示添加按钮,但是可以通过指定OnTitleBarGUI值,在自定义标题绘制方式的同时自定义添加按钮
    bool HideRemoveButton 如果值为TRUE,则将会隐藏元素中的删除按钮,但是可以通过指定OnBeginListElementGUI和OnEndListElementGUI在自定元素绘制方式的同时自定义删除按钮
    string ListElementLabelName 指定列表中元素的成员名称为列表元素绘制标签
    string OnBeginListElementGUI 指定一个方法名,列表中的元素在绘制前都会调用此方法。此方法必须返回void类型,同时带有一个int类型的参数(表示正在绘制元素的索引)。与OnEndListElementGUI配对使用,可以自定义列表中元素绘制方式
    string OnEndListElementGUI 指定一个方法名,列表中元素在绘制结束时会调用此方法,此方法必须返回void类型,同时带有一个int类型的参数(表示正在绘制元素的索引)。与OnBeginListElementGUI配对使用,可以自定义列表中元素绘制方式
  • Properties(属性)

    Get/Set 类 型 定义名称 描 述
    Get&Set bool DraggableItems 如果对此进行赋值,将会覆盖掉Odin系统设置中关于拖动的设置,显式使用此值来判断是否可拖动
    Get&Set bool Expanded 如果对此属性进行赋值,将会覆盖掉Odin系统设置中关于是否展开的设置,显式使用此值来判断是展开还是折叠
    Get&Set bool IsReadOnly 列表是否标记为只读,如果值为True则列表中所有的编辑功能如添加、删除、拖动等将不再绘制,但是并不会禁用GUI(即:还可以继续编辑具体的值),如果想完全禁用,参考ReadOnlyAttribute
    Get&Set int NumberOfItemsPerPage 设置第页中显示元素的数量,如果对此值进行赋值,则会覆盖掉Odin系统设置中的设置,显式使用此值来决定每页显示元素数量
    Get&Set string OnTitleBarGUI 指定一个方法名,在绘制标题栏时将会调用此方法进行绘制,可以通过此属性来自定义标题栏的绘制方式
    Get&Set bool ShowPaging 列表是否使用分页功能,如果对此属性进行赋值,将会覆盖掉Odin系统设置中相关的设置,显式使用此属性来判断是否启用分页功能
    Get&Set bool ShowItemCount 设置是否显示元素数量,如果对此属性进行赋值,将会覆盖掉Odin系统设置中相关的设置,显示使用此属性来判断是否显示元素数量
    Get&Set bool ShowIndexLabels 设置是否显示元素的索引,如果值为True,则每个元素在绘制时,会绘制一标签用来显示元素的索引
    Get bool PagingHasValue 判断属性ShowPaging是否有设置值
    Get bool ShowItemCountHasValue 决断属性ShowItemCount是否有设置值
    Get bool NumberOfItemsPerPageHasValue 属性NumberOfItemsPerPage是否有设置值
    Get bool DraggableHasValue 判断属性DraggableItems是否有设置值
    Get bool IsReadOnlyHasValue 属性IsReadOnly是否有设置值
    Get bool ExpandedHasValue 判断属性Expanded是否有设置值
    Get bool ShowIndexLabelsHasValue 属性ShowIndexLabels是否有设置值

    PS:Get/Set列表示此属性是否可读或可写;在属性中存在着很多类似于***HasValue的只读属性,其表示对应的属性值是否有设置过值,如果有设置值将会使用设置的值做为当前显示的值,如果没有设置过值将会使用Odin系统设置中相对应的值做为默认值

示例

Unity插件之Odin 2.Inspector使用-BaseEditorChanges_第8张图片
List/Arrary-ListDrawerSettingsAttribute


Odin对Object影响

HideReferenceObjectPickerAttribute

简介

使用此属性标签可以隐藏Object的选择器,但是Object的选择器隐藏后还是通过右键菜单设置对像为null,或者设置一个其它的值

API详解

  • Fields(字段)
  • Properties(属性)
  • Constructors(构造方法)

示例



你可能感兴趣的:(Unity插件之Odin 2.Inspector使用-BaseEditorChanges)