定制特性处理器定位器:如下所示:
1.定制特性处理器定位器首先会查找和创建定制特性处理器实例;然后会通过定制特性处理器实例来使用定制特性列表扩展绘制检视面板属性。
2.定制特性处理器定位器类型为OdinAttributeProcessorLocator。
3.定制特性处理器定位器类型中的GetSelfProcessors函数具有以下特性:
3.1.该函数的参数表示检视面板属性。
3.2.该函数的返回值表示定制特性处理器实例列表。
3.3.该函数首先会依次遍历定制特性处理器实例列表;然后通过定制特性处理器实例来调用ProcessSelfAttributes函数对检视面板属性使用定制特性列表进行扩展绘制。
4.定制特性处理器定位器类型中的GetChildProcessors函数具有以下特性:
4.1.该函数的第一个参数表示检视面板父属性,第二个参数表示检视面板子属性。
4.2.该函数的返回值表示定制特性处理器实例列表。
4.3.该函数首先会依次遍历定制特性处理器实例列表;然后通过定制特性处理器实例来调用ProcessChildMemberAttributes函数对检视面板父属性下面的检视面板子属性使用定制特性列表进行扩展绘制。
5.自定义定制特性处理器定位器的流程如下所示:
5.1.首先定义两个检视面板属性类型;然后将其中一个检视面板属性类型嵌套在另一个检视面板属性类型里面。参考代码如下所示:

// 自定义检视面板属性类型
[Serializable]
public class MyChildClass
{// 以下字段为检视面板子属性public int ChildIntData;public string ChildStringData;
}// 自定义检视面板属性类型
[Serializable]
public class MyRootClass
{// 以下字段为检视面板子属性public int RootIntData;public string RootStringData;public MyChildClass RootClassData;
}

5.2.首先创建一个继承自OdinAttributeProcessor<T>类型的自定义定制特性处理器类型;然后将该自定义定制特性处理器类型的泛型参数设置为关联的自定义检视面板属性类型;最后将该自定义定制特性处理器类型应用OdinDontRegisterAttribute定制特性。参考代码如下所示:

[OdinDontRegister]
public class MyRootClassAttributeProcessor : OdinAttributeProcessor<MyRootClass>
{}

5.3.首先重写自定义定制特性处理器类型的ProcessSelfAttributes函数来对检视面板属性使用定制特性列表进行扩展绘制;然后重写自定义定制特性处理器类型的ProcessChildMemberAttributes函数来对检视面板父属性下面的检视面板子属性使用定制特性列表进行扩展绘制。参考代码如下所示:

public override void ProcessSelfAttributes(InspectorProperty property, List<Attribute> attributes)
{// 使用定制特性列表来扩展绘制检视面板属性attributes.Add(new InlinePropertyAttribute());
}public override void ProcessChildMemberAttributes(InspectorProperty parentProperty, MemberInfo member, List<Attribute> attributes)
{// 使用定制特性列表来扩展绘制检视面板父属性下面的检视面板子属性attributes.Add(new HideLabelAttribute());if (member.Name == "RootIntData"){attributes.Add(new RangeAttribute(0, 20));}else if (member.Name == "ChildIntData"){attributes.Add(new RangeAttribute(0, 100));}
}

5.4.首先创建一个继承自OdinAttributeProcessorLocator类型的自定义定制特性处理器定位器类型;然后在该自定义定制特性处理器定位器类型中创建一些自定义定制特性处理器实例。参考代码如下所示:

public class MyOdinAttributeProcessorLocator : OdinAttributeProcessorLocator
{// 创建一些自定义定制特性处理器实例private static readonly MyRootClassAttributeProcessor Processor = new MyRootClassAttributeProcessor();
}

5.5.重写自定义定制特性处理器定位器类型的GetSelfProcessors函数来对使用该自定义定制特性处理器定位器类型的检视面板属性进行扩展绘制。参考代码如下所示:

// 首先依次遍历定制特性处理器实例列表;然后通过定制特性处理器实例来调用ProcessSelfAttributes函数对检视面板属性使用定制特性列表进行扩展绘制。
public override List<OdinAttributeProcessor> GetSelfProcessors(InspectorProperty property)
{return new List<OdinAttributeProcessor>() {Processor};
}

5.6.重写自定义定制特性处理器定位器类型的GetChildProcessors函数来对使用该自定义定制特性处理器定位器类型的检视面板父属性下面的检视面板子属性进行扩展绘制。参考代码如下所示:

 // 首先依次遍历定制特性处理器实例列表;然后通过定制特性处理器实例来调用ProcessChildMemberAttributes函数对检视面板父属性下面的检视面板子属性使用定制特性列表进行扩展绘制。
public override List<OdinAttributeProcessor> GetChildProcessors(InspectorProperty parentProperty, MemberInfo member)
{return new List<OdinAttributeProcessor>() {Processor};
}

5.7.首先使用检视面板属性类型创建一个实例;接着调用PropertyTree.Create函数来为该检视面板属性实例创建一个PropertyTree实例;然后将自定义定制特性处理器定位器实例赋值给PropertyTree实例的AttributeProcessorLocator属性;最后调用PropertyTree实例的Draw函数来绘制关联的检视面板属性实例。参考代码如下所示:

public class SampleAttributeProcessorLocator : MonoBehaviour
{private PropertyTree tree = null;[OnInspectorGUI]public void OnInspectorGUI(){if (tree == null){// 创建检视面板属性实例MyRootClass instance = new MyRootClass();// 为检视面板属性实例创建关联的PropertyTree实例tree = PropertyTree.Create(instance);// 将自定义定制特性处理器定位器实例赋值给PropertyTree实例的AttributeProcessorLocator属性tree.AttributeProcessorLocator = new MyOdinAttributeProcessorLocator();}// 使用PropertyTree实例来绘制关联的检视面板属性实例tree.Draw(false);}
}

Unity Odin从入门到精通(八):自定义定位器相关推荐

  1. Kali Linux 从入门到精通(八)-主动信息收集

    Kali Linux 从入门到精通(八)-主动信息收集 基本介绍 直接与目标系统交互通信 无法避免留下访问的痕迹 使用受控的第三方电脑进行探测 使用代理或已经被控制的主机 做好被封杀的准本 使用噪声迷 ...

  2. C4D致富经典入门到精通(八)

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

  3. 数独游戏技巧从入门到精通_从入门到精通八讲 | 高效氮化镓电源设计第六讲—EMC优化和整改技巧...

    氮化镓电源设计从入门到精通,这个系列直播共分为八讲,本篇第六讲将为您介绍EMC优化和整改技巧,助您完成电源工程师从入门到精通的蜕变. 前期回顾(点击下方内容查看上期直播): - 第一讲:元器件选型 - ...

  4. opus 压缩率_Opus从入门到精通(八)Opus编码基础之压缩编码

    只有在保持信号质量的前提下,设法降低码率及数据量,才能使标准得到应用.而这种降低码率的过程,被称为压缩编码或新源编码. 这节介绍一些基础的压缩编码思想与方法,为后面Opus语音编码做基础准备. 压缩编 ...

  5. 物联网Lora模块从入门到精通(八)Lora无线通信

    一.前言 在某些环境下,无法通过有线传输数据,这时候我们需要使用Lora无线通信传输数据,Lora无线数据传输具有低功耗.距离长的特点,常用于工厂内等,需要Lora基站. 我曾做过距离测试:Lora模 ...

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

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

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

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

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

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

  9. C4D致富经典入门到精通(三)

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

最新文章

  1. 杭电多校第四场-H- K-th Closest Distance
  2. Bootstrap系列 -- 34. 按钮下拉菜单
  3. [ATF]-ATF文档和代码的深度解读
  4. python数字编码_Python 编码为什么那么蛋疼?
  5. 为什么要importmodulepython_python – 为什么“import”这样实现?
  6. Java必会的基础知识(3)
  7. java队列实现限流,java中应对高并发的两种策略
  8. 如何让你的QQ不再掉线!
  9. sap未分摊差异怎么处理_物料主数据价格控制及差异问题
  10. 程序员被公司开除,隔阵子领导命令回前公司讲解代码,网友直呼:关我嘛事?
  11. mac 本地安装mysql_mac 本地安装mysql服务
  12. OpenSSL API: SSL对象和SSL_CTX对象的使用
  13. linux 配置ssh免密码登陆本机
  14. 微信公众号之免登陆快速入门
  15. Python爬虫教程入门(附源码)
  16. oracle导入blob出错,oracle导出blob,clob出错的问题
  17. 游戏程序常规设计模式
  18. disc性格测试结果分析(disc性格测试结果分析23个D16个C)
  19. 启用DoH(DNS-over HTTPS)在Windows、Android、IOS平台
  20. CSharp 常用函数

热门文章

  1. layerui js获取数据表格中的动态内容on失效live失效
  2. SQL语句简单查询实例
  3. 世界三大顶级音响_世界顶级音响有哪些?世界十大顶级音响排行榜
  4. 一对一交友源码,仿抖音短视频源码,搭建的秘密你了解多少?
  5. 杭州内推 | 阿里巴巴CCO智能服务算法团队招聘NLP算法工程师 (社招P6/P7)
  6. 熹妃传获取服务器信息,熹妃传阅历怎么获取_熹妃传阅历获取攻略_手心游戏
  7. 谷歌浏览器 手机/浏览器切换
  8. nginx反向代理tcp
  9. python去除水印
  10. Exynos4412 移植Linux-6.1(七)挂载Ramdisk文件系统,【已解决】Couldn‘t find valid RAM disk image starting at 0