• 请商店购买Odin以支持开发者!

    那一天,人类终于回想了起曾一度被Unity所支配的恐怖

    Type[,]
    Type[][]
    List<List<Type>>
    Dictionary<Type,Type>
    ...
    

    这些都是游戏里很常用的数据类型,然而你!用!不!了!
    要说强行序列化的办法是有的,Unity提供了自定义序列化的接口,但是麻烦得很,曾经我查了很多资料试图序列化Dictionary,最终结果依然无法让人满意,有很多问题。
    也有别的解决途径,使用XML等文件形式来存储数据也是可以的,现在的项目里甚至使用了Excel文件(用以编辑地图)。
    很想问为什么Unity发展了这么多年,还是不能原生支持这些类型的序列化。如果你Google一下,可以看到官方论坛里有很多这些关于序列化的问题。

    在不借助插件的情况下,唯一可以简单实现的就是锯齿数组,以实现一个Int的锯齿数组为例:

    public class DEMO : MonoBehaviour
    {[System.Serializable]public class IntElement{public int Value;}[System.Serializable]public class Int2D{public IntElement[] Element;}public Int2D[] Data;
    }
    

    这样就可以获得一个类似锯齿数组的效果,也可以充当二维数组使用。当然,Unity会顺便送你一个屎一样的编辑器。

    显然这个编辑器是没法用的,所以你就要写CustomEditor,然后你发现你花了半天写出来的编辑器虽然能用,但是扩展性糟糕,代码难读修改困难。唯一慰藉就是写成之后还稍稍有点成就感。

    现在!你有了Odin!

    导入插件后,编写代码:

    using Sirenix.OdinInspector; //记得Using插件的名字空间public class DEMO : SerializedMonoBehaviour //要使用Odin的序列化功能需要改为从这个类型派生
    {[BoxGroup("Data_A")]public int[,] Data_A = new int[3, 3];public int[][] Data_B = new int[3][];public List<List<int>> Data_C = new List<List<int>>();public Dictionary<string, int> Data_D = new Dictionary<string, int>();
    }
    

    然后...

    就是这么快速、简单、无痛。

    超强的编辑器扩展!

    Unity自带了一些Attributes,比如[Header]、[Range]、[Multiline]、[Space]等,只能对Inspector进行一些简单的扩展和编辑。Odin除了序列化的功能,还包括了强大的编辑器扩展能力,新增了几十种Attributes!

    以上是Odin自带的DEMO中的几个范例,如此复杂的编辑器界面仅仅是在属性上添加数个Attributes就实现了。

    Odin插件已经运用在手头上的项目上了,根据几个月的使用经验,几乎不需要自己重写编辑器界面,仅靠Attributes的搭配使用就可以完成绝大部分编辑器界面需求了。当然Odin也提供了加强版的编辑器Drawer,如果Attributes不满足需求,自己重写编辑器也会比Unity原生简单许多。
    另外提一点,Odin兼容各个平台,但是如果使用了自定义的序列化类型并且需要在PC以外的平台发布的话,需要Tool→Odin Inspector→Preferences→AOT Generation页面里生成一下DLL,否则会报错。

    具体使用方法就不说了,参照插件自带的DEMO场景和Odin Inspector 文档就可以很容易学会使用了。

  • 最后

    Odin实在是太好用,用过之后感觉已经回不去了,现在开个项目第一件事就是导入Odin插件,毕竟之前因为这些问题而疯狂受苦。这里会提供一个旧版本的下载,这个版本可以稳定运行在最新的Unity2017.3,如果有条件请在Asset Store中支持开发者。

Unity引擎对于自定义编辑器的支持已经比传统的游戏引擎要方便一个等级了,它基于Unity的反射机制,在界面框架内已经实现了非常方便的属性编辑功能,比如最为常见和常用的MonoBehavior的属性编辑和查看。相比于自研引擎要自己实现前文所描述的这套元数据编辑器框架,对于常规的配置需求Unity已经做得更好了。

然而,作为开发者来说还是有更加复杂的需求是Unity这套结构目前所不支持的,比如Dictionary的编辑,比如一些动态的显隐控制。好在Unity有强大的Asset Store,Odin这样的插件也就应运而生,虽然55美元的售价稍微有些贵,但我觉得它绝对物超所值!引用一段官方介绍来描述其功能:

Odin puts your Unity workflow on steroids, making it easy to build powerful and advanced user-friendly editors for you and your entire team. With an effortless integration that deploys perfectly into pre-existing workflows, Odin allows you to serialize anything and enjoy Unity with 80+ new inspector attributes, no boilerplate code and so much more!

简答来说,它通过提供更多的新属性来方便我们编写强大的编辑器功能,并且提供了序列化模块。抛开序列化不说,我就举几个自己真正使用过的例子来描述它的一些好用功能。

https://www.jianshu.com/p/154ab336c38f

Unity插件介绍——Odin_weixin_34221073的博客-CSDN博客

easyui表格编辑事件_Unity手游开发札记——从Odin插件聊基于元数据的编辑器实现_weixin_39683021的博客-CSDN博客

Odin插件与基于元数据的编辑器实现相关推荐

  1. easyui表格编辑事件_Unity手游开发札记——从Odin插件聊基于元数据的编辑器实现

    Metadata is data that provides information about other data. 最近一个多月的时间在全力做新项目的Demo,由于程序暂时还只有我一个人,所以从 ...

  2. 移动端实现元素拖拽效果插件_基于自然流布局的可视化拖拽搭建平台设计方案...

    LowCode 是高效.高性能的拖拽式低代码开发平台. 也是笔者最近一直在研究的方向, 对于可视化搭建平台的实现方案笔者之前写过很多文章, 这里带大家探索一个新方向--基于自然流布局的可视化搭建平台. ...

  3. 【Odin插件】Unity补完计划

    前言 今天我就是来吹爆这个Odin插件的! 解决了两个我使用Unity至今遇到过的两个让我深恶痛绝的槽点: 麻烦的自定义编辑器 序列化某些类型 由于这个插件价格还是比较贵的(Odin - Inspec ...

  4. eclipse中安装freemarker插件及ftl使用freemarker编辑器--在线安装方法

    eclipse中安装freemarker插件及ftl使用freemarker编辑器--在线安装方法 在线安装的方法是:Help –> Install New Software 点击  and h ...

  5. 03.基于元数据的管理体系构建---电子签章标准化集成

    集成需求 随着企业数据化的推进,电子签章作为一种常用的技术在慢慢替换部分实物章.基于需求与电子签章流程在系统中集成的标准化工序,将推动统一的模型实现不同厂商的电子签章与元数据平台的集成. 名词解释 序 ...

  6. 基于元数据驱动的ETL

    2016-07-03 朱洁  元数据的定义元数据(Metadata),为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置.历史数据 ...

  7. vue连线 插件_基于vue的网页标尺辅助线工具(vue-ruler-tool)

    原文首发于我的博客,欢迎点击查看获得更好的阅读体验~ 标尺辅助线.gif vue-ruler-tool 最近在网上找到一个网页制作辅助工具-jQuery标尺参考线插件,觉得在现在的一个项目中能用的上, ...

  8. 极光笔记 | 极光基于元数据驱动数据治理浅谈

    作者:极光数据平台部  计算平台组经理 --蔡祖光 前言 极光大数据平台目前支撑着公司开发者.广告.金融风控.行业洞察.公共安全在内的核心业务的数据生产活动,随着公司业务体量的增长,数据平台的规模也在 ...

  9. mysql读写分离插件_基于mybatis读写分离插件

    我相信很多朋友都尝试写过读写分离插件,或者项目中用到过.首先读写分离的职责应该属于数据访问层而不是业务层,其次读写分离不应该侵入我们代码层中.因此在 service-dao-orm- 数据库驱动调用链 ...

  10. jsplumb设置锚点_记录一次基于jsPlumb流程图编辑器的开发过程

    前言 接到项目需求后,发现没有做过相关项目,盘算着拖拽倒是没有问题,但是控件的连线好像挺复杂,所以先开始了一番搜索,希望有合适的轮子那最好不过了.看了这篇对比文章:超级好用的流程图js框架,也看了一个 ...

最新文章

  1. day22_面向对象
  2. 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)
  3. JRuby:谁说鱼与熊掌不可兼得
  4. 【latex】输入公式与编号
  5. Unity3D中自带事件函数的执行顺序
  6. charles抓包工具使用及手机抓包教程
  7. matlab 直方图规定化,直方图规定化
  8. 迅捷CAD编辑器中PDF转换CAD的详细步骤
  9. 组合体视图的画图步骤_工程制图 组合体
  10. 微信公众平台开发概述
  11. IT行业可以做什么副业?
  12. Excel常用小技巧
  13. Excel 2010 SQL应用105 域聚合函数之第一个和最后一个
  14. u盘格式化了怎样恢复还原
  15. 微信小程序使用tensorflow做人脸识别检测卡顿的部分解决思路
  16. python调用百度地图API 实现单点沿线轨迹运动
  17. C# flash player 制作
  18. 小米5x有android 8.0,小米5X 8.0【Android 8.0】没错是8.0!
  19. jieba:一款为中文分词而生的Python库
  20. abap al设置单元格可编辑 oo_REUSE_ALV_GRID_DISPLAY_LVC-可编辑单元格

热门文章

  1. iMeta: 南医大余光创组ggtree最新文章-系统发育树存储与可视化的数据结构
  2. 步进电机正反转实验_三相电机正反转自锁互锁弄清楚,就能轻松接线
  3. 医号馆诊所管理软件系统更新,新增人脸识别、处置单等功能!
  4. 头脑风暴 软件_头脑风暴和思维导图的最佳网站和软件
  5. 一文回顾腾讯数字生态大会·微搭低代码专场
  6. 姿态传感器的原理与应用文献笔记
  7. 用连接数据库的方式读取excel
  8. 使用EXCEL连接PGSQL
  9. em算法 c语言,EM算法原理与应用(附代码)
  10. 单层感知器->BP算法详细推导