Unity插件之Odin 3.特殊类型序列化

Unity插件之Odin 3.特殊类型序列化

简介

Unity本身可以对使用的变量进行序列化,但是并不支持任意的类型,甚至对于某些常用的类型也并不支持,比如字典类型、二维数组、代理(delegate)等,对此在项目开发中确实存在着很多的不方便,Odin对这些特殊类型的也进行了支持,通过继承SerializedMonoBehaviour可以对这些数组类型的序列化。本章节中将详细的讨论Odin序列化这些特殊类型的方式及API详解

  • Odin序列化二维数组([,])
  • Odin序列化字典(Dictionary)
  • Odin序列化代理(delegate)
  • ....

本文还将介绍几个属性标签,分别:

  • TableMatrix
  • DictionaryDrawerSettings

声明

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

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

Unity插件之Odin 3.特殊类型序列化(http://www.liyubin.com/articles/2019/03/28/1553765557732.html)

Odin序列化二维数组([,])

当脚本继承自SerializedMonoBehaviour即可对二维数组进行序列化,其将使用二维表格的形式显示序列化的内容。

Unity插件之Odin 3.特殊类型序列化_第1张图片
Odin-Serialized Two Dimensional Array

如果想要控制二维表在Odin的显示,可以通过添加属性标签TableMatrixAttribute,通过对其中的属性值可以很方便的控制二维数组在属性面板中的显示。

TableMatrixAttribute

简介

使用此标签可以对Odin序列化的二维数组的显示进行修改,可以通过属性控制不同的显示

PS:此标签需要在继承自SerializedMonoBehaviour的脚本中使用。对于非SerializedMonoBehaviour的脚本中,Unity的属性面板并不会显示二维数组,如果想在属性面板中显示,可以添加ShowInInspector属性标签(只能显示,对于修改等行为是不支持的,因为Unity无法序列化这些对象)

API详解

  • Fields

    类 型 名 称 说 明
    bool IsReadOnly 是否为只读,如果为true则添加、删除等功能按钮将不会再显示
    bool ResizableColumns 是否可以修改列宽度
    string VerticalTitle 重直标签
    string HorizontalTitle 水平标题
    string DrawElementMethod 指定个方法名称,可以使用此方法覆盖默认的绘制方式,其方法的参数为(Rect rect,ValueType value)
    int RowHeight 每行的高度,默认值是0
    bool SquareCells 是否使用正方形区域绘制每个元素
    bool HideColumnIndices 是否隐藏列号显示
    bool HideRowIndices 是否隐藏行号显示
    bool RespectIndentLevel 是否使用GUI设定的IndentLevel的值
    bool Transpose 是否反转行与列
  • Properties

  • Constructors

示例

Unity插件之Odin 3.特殊类型序列化_第2张图片
Odin-TableMatrixAttribute

Odin序列化字典(Dictionary)

当脚本继承自SerializedMonoBehaviour即可对字典类型的数据进行序列化,其可以使用带标题栏的折叠区域来显示序列化的内容

Unity插件之Odin 3.特殊类型序列化_第3张图片
Odin-Serialized Dictionary

如果想要控制具体的显示样式,可以通过属性标签DictionaryDrawerSettings,通过设置其它的属性可以改变样式

DictionaryDrawerSettings

简介

使用此属性标签可以为字典类型在属性面板中绘制时提供更多的样式

API详解

  • Fields

    类 型 名 称 说 明
    string KeyLabel 为字典的Key添加一个标题
    string ValueLabel 为字典的Value添加一个标题
    DictionaryDisplayOptions DisplayMode 设置绘制每个元素模式
    bool IsReadOnly 是否为只读,如果为true则添加、删除等功能按钮将不会再显示

    DictionaryDisplayOptions显示方式:

    • OneLine

    将字典的Key与Value分别绘制成两列,左侧列为所有的Key,右侧列为所有的Value

    • Foldout

    将字典中的每个元素绘制到一个可折叠的区域,其字典的Key做为标题头,其值将绘制区域内,区域是否折叠可在Odin的系统配置中配置

    • CollapsedFoldout

    将字典中的每个元素绘制到一个可折叠的区域,其字典的Key做为标题头,其值将绘制区域内,默认是展开状态

    • ExpandedFoldout

    将字典中的每个元素绘制到一个可折叠的区域,其字典的Key做为标题头,其值将绘制区域内,默认是折叠状态

  • Properties

  • Constructors

示例

Unity插件之Odin 3.特殊类型序列化_第4张图片
Odin-DictionarySettings

Odin序列化代理(delegate)

当脚本继承自SerializedMonoBehaviour即可对Delegate进行序列化,可以指定Delegate所属的组件上的方法可以序列化到脚本中

Unity插件之Odin 3.特殊类型序列化_第5张图片
Odin-Serialized Delegate

你可能感兴趣的:(Unity插件之Odin 3.特殊类型序列化)