注意事项:如下所示:
1.检视面板根属性为检视面板属性类型创建的字段或者属性,名称默认为$ROOT。
2.检视面板子属性为检视面板根属性的下层属性。
3.检视面板父属性为检视面板子属性的上层属性。
4.检视面板属性包含检视面板根属性和检视面板子属性列表。
5.可以通过PropertyTree类型来使用Odin绘制系统中的所有功能。

定制特性处理器:如下所示:
1.定制特性处理器可以让Odin扩展绘制检视面板属性。如:往检视面板属性上动态添加、修改、删除定制特性等。
2.使用定制特性处理器来扩展绘制检视面板属性时,Odin会自动过滤掉序列化相关的定制特性。
3.定制特性处理器类型有通用版本OdinAttributeProcessor和泛型版本OdinAttributeProcessor<T>两种。其中泛型版本可以约束定制特性处理器类型关联的检视面板属性类型。
4.Odin提供了AttributeListExtension类型来对List<Attribute>对象提供通用辅助函数。
5.定制特性处理器类型中的CanProcessSelfAttributes函数具有以下特性:
5.1.该函数的参数表示检视面板根属性。
5.2.该函数主要用来判定是否可以扩展绘制检视面板根属性。
6.定制特性处理器类型中的ProcessSelfAttributes函数具有以下特性:
6.1.该函数的第一个参数表示检视面板根属性,第二个参数表示定制特性列表。
6.2.该函数主要用来对检视面板根属性使用定制特性列表进行扩展绘制。
7.定制特性处理器类型中的CanProcessChildMemberAttributes函数具有以下特性:
7.1.该函数的第一个参数表示检视面板父属性,第二个参数表示检视面板子属性。
7.2.该函数主要用来判定是否可以扩展绘制检视面板父属性下面的检视面板子属性。
8.定制特性处理器类型中的ProcessChildMemberAttributes函数具有以下特性:
8.1.该函数的第一个参数表示检视面板父属性,第二个参数表示检视面板子属性,第三个参数表示定制特性列表。
8.2.该函数主要用来对检视面板父属性下面的检视面板子属性使用定制特性列表进行扩展绘制。
9.自定义定制特性处理器的流程如下所示:
9.1.首先定义一个检视面板属性类型;然后使用该检视面板属性类型创建一个字段或者属性。参考代码如下所示:

// 自定义检视面板属性类型
[Serializable]
public class MyInspectorPropertyClass
{// 以下字段为检视面板子属性public ScaleMode Model;public float Size;
}public class CustomAttributeProcessorExample : MonoBehaviour
{// 通过自定义检视面板属性类型来创建一个字段,该字段就是检视面板根属性public MyInspectorPropertyClass Processor1;// 通过自定义检视面板属性类型来创建一个属性,该属性就是检视面板根属性[ShowInInspector]public MyInspectorPropertyClass Processor2{get;set;}
}

9.2.首先创建一个继承自OdinAttributeProcessor<T>类型的自定义定制特性处理器类型,并且将泛型参数设置为自定义检视面板属性类型。此时该自定义定制特性处理器类型就只能处理关联的自定义检视面板属性类型。参考代码如下所示:

public class MyAttributeProcessor : OdinAttributeProcessor<MyInspectorPropertyClass>
{}

9.3.首先重写CanProcessSelfAttributes函数来判定是否可以扩展绘制检视面板根属性;然后重写ProcessSelfAttributes函数来对可以扩展绘制的检视面板根属性使用定制特性列表进行扩展绘制。参考代码如下所示:

public override bool CanProcessSelfAttributes(InspectorProperty property)
{// 判定检视面板根属性是否可以使用Odin进行扩展绘制return property.Name == "Processor1";
}public override void ProcessSelfAttributes(InspectorProperty property, List<Attribute> attributes)
{// 使用定制特性列表来扩展绘制检视面板根属性attributes.Add(new InfoBoxAttribute("Dynamically added attributes!"));attributes.Add(new InlinePropertyAttribute());
}

9.4.首先重写CanProcessChildMemberAttributes函数来判定是否可以扩展绘制检视面板父属性下面的检视面板子属性;然后重写ProcessChildMemberAttributes函数来对可以扩展绘制的检视面板父属性下面的检视面板子属性使用定制特性列表进行扩展绘制。参考代码如下所示:

public override bool CanProcessChildMemberAttributes(InspectorProperty parentProperty, MemberInfo member)
{// 判定检视面板父属性下面的检视面板子属性是否可以使用Odin进行扩展绘制return parentProperty.Name == "Processor2";
}public override void ProcessChildMemberAttributes(InspectorProperty parentProperty, MemberInfo member, List<Attribute> attributes)
{// 使用定制特性列表来扩展绘制检视面板父属性下面的检视面板子属性attributes.Add(new HideLabelAttribute());attributes.Add(new BoxGroupAttribute("Box", showLabel: false));if (member.Name == "Mode"){attributes.Add(new EnumToggleButtonsAttribute());}else if (member.Name == "Size"){attributes.Add(new RangeAttribute(0, 5));}
}

10.当自定义定制特性处理器类型应用OdinDontRegisterAttribute定制特性时,虽然该自定义定制特性处理器类型不能直接处理关联的检视面板属性类型,但是可以使用定制特性处理器定位器类型来处理检视面板属性类型。参考代码如下所示:

[OdinDontRegister]
public class MyAttributeProcessor : OdinAttributeProcessor<MyInspectorPropertyClass>
{}

属性处理器:如下所示:
1.属性处理器可以让Odin扩展绘制检视面板根属性。如:往检视面板根属性上动态添加、修改、删除检视面板子属性等。
2.属性处理器类型有通用版本OdinPropertyProcessor和泛型版本OdinPropertyProcessor<T>两种。其中泛型版本可以约束属性处理器类型关联的检视面板属性类型。
3.Odin提供了ProcessedMemberPropertyResolverExtensions类型来对List<InspectorPropertyInfo>对象提供通用辅助函数。
4.属性处理器类型中的CanProcessForProperty函数具有以下特性:
4.1.该函数的参数表示检视面板根属性。
4.2.该函数主要用来判定是否可以扩展绘制检视面板根属性。
5.属性处理器类型中的ProcessMemberProperties函数具有以下特性:
5.1.该函数的参数表示检视面板根属性下面的检视面板子属性列表。
5.2.该函数主要用来对检视面板根属性下面的检视面板子属性列表进行扩展绘制。
6.自定义属性处理器的流程如下所示:
6.1.首先定义一个检视面板属性类型;然后使用该检视面板属性类型创建一个字段或者属性。参考代码如下所示:

// 自定义检视面板属性类型
[Serializable]
public class MyInspectorPropertyClass
{// 以下字段为检视面板子属性public string Top;public string Middle;public string Bottom;public int Value1;public int Value2;public int Value3;
}public class CustomPropertyProcessorExample : MonoBehaviour
{// 通过自定义检视面板属性类型来创建一个字段,该字段就是检视面板根属性public MyInspectorPropertyClass Processor1;// 通过自定义检视面板属性类型来创建一个属性,该属性就是检视面板根属性[ShowInInspector]public MyInspectorPropertyClass Processor2{get;set;}
}

6.2.创建一个继承自OdinPropertyProcessor<T>类型的自定义属性处理器类型,并且将泛型参数设置为自定义检视面板属性类型。此时该自定义属性处理器类型就只能处理关联的自定义检视面板属性类型。参考代码如下所示:

public class MyPropertyProcessor : OdinPropertyProcessor<MyInspectorPropertyClass>
{}

6.3.首先重写CanProcessForProperty函数来判定是否可以扩展绘制检视面板根属性;然后重写ProcessMemberProperties函数来对可以扩展绘制的检视面板根属性下面的检视面板子属性列表进行扩展绘制。参考代码如下所示:

public override bool CanProcessForProperty(InspectorProperty property)
{// 判定检视面板根属性是否可以使用Odin进行扩展绘制return property.Name == "Processor1";
}public override void ProcessMemberProperties(List<InspectorPropertyInfo> propertyInfos)
{// 将检视面板子属性Bottom移动到检视面板根属性下面的检视面板子属性列表的开头位置for (int i = 0; i < propertyInfos.Count; i++){var propertyInfo = propertyInfos[i];if (propertyInfo.PropertyName == "Bottom"){propertyInfos.Insert(0, propertyInfo);propertyInfos.RemoveAt(i + 1);break;}}// 往检视面板根属性下面的检视面板子属性列表中添加一个名称为HelloFunc且类型为委托的检视面板子属性propertyInfos.AddDelegate("HelloFunc", () => { Debug.Log("Hello");}, new BoxGroupAttribute("Inject"));// 往检视面板根属性下面的检视面板子属性列表中添加一个名称为Sum且类型为int的检视面板子属性propertyInfos.AddValue("Sum",(ref MyInspectorPropertyClass instance) => instance.Value1 + instance.Value2 + instance.Value3,(ref MyInspectorPropertyClass instance, int sum) => { },new BoxGroupAttribute("Inject"));// 往检视面板根属性下面的检视面板子属性列表中添加一个名称为Enum且类型为MyEnum的检视面板子属性propertyInfos.AddValue("Enum",(ref MyInspectorPropertyClass instance) => (MyEnum)instance.Value1,((ref MyInspectorPropertyClass instance, MyEnum value) => { instance.Value1 = (int)value;}),new EnumToggleButtonsAttribute(),new BoxGroupAttribute("Inject"));// 从检视面板根属性下面的检视面板子属性列表中删除一个名称为Value1的检视面板子属性propertyInfos.Remove("Value1");
}

Unity Odin从入门到精通(五):自定义处理器相关推荐

  1. Unity Odin从入门到精通(八):自定义定位器

    定制特性处理器定位器:如下所示: 1.定制特性处理器定位器首先会查找和创建定制特性处理器实例:然后会通过定制特性处理器实例来使用定制特性列表扩展绘制检视面板属性. 2.定制特性处理器定位器类型为Odi ...

  2. Kali Linux 从入门到精通(五)-测试环境准备

    Kali Linux 从入门到精通(五)-测试环境准备 准备实验环境 渗透非系统授权的弊端 搭建自己的实验环境 安装虚拟机 微软最新软件 http://msdn.microst.com/en-ca/s ...

  3. Drf从入门到精通五(2个视图基类、5个视图拓展类、9个视图子类、视图集)

    文章目录 一.2个视图基类 1) 基于AIPView写5个接口 2) 基于GenericAPIView写5个接口 二.5个视图拓展类 1) 基于GenericAPIView+5个视图拓展类写接口 三. ...

  4. 【超级无敌详细的韩顺平java笔记】从入门到精通---五种运算符

    一.算术运算符 1.介绍 算术运算符是对数值类型的变量进行运算的 2. 演示算术运算符的使用 public class ArithmeticOperator { //编写一个 main 方法 publ ...

  5. 物联网Lora模块从入门到精通(五)光照与温湿度传感器

    一.前言 在程序开发中,光照与温湿度的获取是十分常见与重要的,本文我们主要是使用M21温湿度光照三合一传感器,其中温湿度数据通过协议获取,而光照通过ADC获取. 二.代码实现 本文内容较为简单,且后续 ...

  6. Spark SQL:从入门到精通(五)[开窗函数]

    概述 https://www.cnblogs.com/qiuting/p/7880500.html 介绍: 开窗函数的引入是为了既显示聚集前的数据,又显示聚集后的数据.即在每一行的最后一列添加聚合函数 ...

  7. Unity Timeline从入门到精通(三):轨道详述

    添加轨道的方式:如下所示: 1.单击添加轨道按钮,选择轨道菜单项. 2.鼠标右击轨道列表的空白区域,选择轨道菜单项. 3.拖拽游戏对象到轨道列表的空白区域,选择轨道菜单项. 4.鼠标右击轨道组或者轨道 ...

  8. [Unity3d]unity从入门到精通官方教程

    <Unity 4.x 入门到精通>完整pdf 一百多M: http://download.csdn.net/detail/s10141303/6912127 如果不能正常下载   也可以加 ...

  9. SpringBoot入门到精通-SpringBoot启动流程(七)

    定义自己的starter SpringBoot入门到精通-Spring的注解编程(一) SpringBoot入门到精通-SpringBoot入门(二) SpringBoot入门到精通-Spring的基 ...

  10. C4D致富经典入门到精通(十)

    C4D中渲染操作与AE交互 C4D基础界面的介绍与常用快捷键:  C4D致富经典入门到精通(一) C4D父子关系的理解与创建参数几何体与可编辑对象: C4D致富经典入门到精通(二) C4D样条曲线创建 ...

最新文章

  1. Java中关于进程和线程的理解
  2. 2020身高体重标准表儿童_2020年儿童标准身高体重表发布,对比看看,你家孩子达标了吗?...
  3. 多线程Socket的InputStream的困扰一天才解决的问题
  4. 百度网盘自动备份php,Linux定时备份数据到百度云盘
  5. 05.multi_search_template
  6. visio wps 流程图_科研必备:几款好用的流程图工具,助力你的论文/科研绘图
  7. 怎么把css改成打印,css 打印print
  8. 关于DXF文件读取的小结
  9. FydeOS v11 发布,全新 Linux 终端提供更多功能
  10. springboot毕业设计 基于springboot房产中介预约看房系统毕业设计设计与实现参考
  11. 备忘录:XCode配置
  12. matlab脉冲调制,基于matlab脉宽调制方法的研究
  13. 敏捷开发 SCRUM 简介
  14. 英语语法(简单句型篇)
  15. 匿名发脉脉的拼多多员工,是如何被发现的?背后真相令人发指...
  16. Python_删除TXT文件中不想要的内容
  17. mysql 替换 斜杠_Mysql like查询语句中,结果包含反斜杠 \ 字符的,需要替换成四个反斜杠 \\\\...
  18. 浅谈人工智能:现状、任务、构架与统一
  19. MyIE2几个让我欣赏的地方
  20. 1055: 兔子繁殖问题 Python

热门文章

  1. java修改jpg图片、mp3音频文件的后缀名
  2. python实战演练二:抓取我自己csdm博客信息的标题和文章链接,并存入文件夹《列表存入数据到txt》
  3. excel查标准正态分布_excel2010正态分布的方法步骤图
  4. VHDL学习:两种方式实现四选一选择器
  5. bzoj·入门OJ·统计损失
  6. Python面向对象编程:数据封装、继承和多态
  7. python三维地质建模_GemPy三维地质建模工具包
  8. 黑苹果安装记录(史上最简单的安装教程——小白福利)
  9. AI实战:推荐系统之影视领域用户画像——标签数据清洗
  10. js 线性最小二乘回归线方程