商店地址:Odin
Odin是一个对编辑器进行拓展的插件,可以序列化各种数据,方便的制作出各种编辑器界面,如下:


导入插件后,如图Tool–Odin Inspector–Getting Started可以查看Odin提供的概览界面。

点击Open Attributes Overview会显示属性,字段编辑相关的示例,可以让我们方便的编辑Inspector界面的内容。点击Leran More会显示一些窗口相关的示例,方便自定义一些弹窗界面。

概览的下方提供了一些Scene样例,方便进一步学习。

首先,查看字段相关的实例,如上图,左侧是分类,右侧上方是Inspector界面上绘制出的内容,右侧下方是对应的代码,可直接复制使用。
Odin提供了100多个特性Attribute,只需要把特性加到字段上就可以显示上方的样式。特性简单说就是用来标记元素的,如字段,方法,类。这么多特性很难记住,一般是需要了再去查找合适的样式。

 //AssetsOnly表示只能拖拽Assets目录下的资源,场景中的资源是无法拖动[AssetsOnly]public GameObject SomePrefab;//SceneObjectsOnly相反,只能拖拽Scene场景中的资源[SceneObjectsOnly]public GameObject SomeSceneObject;

下面总结一些比较常用的特性。

1.限制数值范围,滑块,进度条

    [Range(0, 100)]public int Field = 2;[MinValue(0)]public int IntMinValue0;[MaxValue(0)]public int IntMaxValue0;[ProgressBar(0, 100)]public float ProgressBar = 50;

2.数值变化时触发特定方法

 [OnValueChanged("OnValueChanged")]public int DelayedField;//ShowInInspector用于将属性显示到界面上[ShowInInspector][OnValueChanged("OnValueChanged")]public string DelayedProperty { get; set; }private void OnValueChanged(){Debug.Log("Value changed!");}

3.颜色

 //字段添加颜色[GUIColor(0.3f, 0.8f, 0.8f, 1f)]public int ColoredInt1;//调色板[ColorPalette("Fall")]public Color Color1;//按钮添加颜色[GUIColor(0, 1, 0)][Button("ButtonName", ButtonSizes.Small)]private void ButtonMethod(){}

4.提示信息

    //HideLabel用于隐藏字段名[Title("Vector3标题")][HideLabel]public Vector3 WideVector1;//Space用于添加一行空隙[Space][InfoBox("提示1")]public int Int1;//MyGameObject为空时才会提示[Required]public GameObject MyGameObject;

5.输入校验

    [ValidateInput("HasMeshRenderer")]public GameObject DynamicMessage;private bool HasMeshRenderer(GameObject gameObject, ref string errorMessage){if (gameObject == null) return true;if (gameObject.GetComponentInChildren<MeshRenderer>() == null){errorMessage = "\"" + gameObject.name + "\" 必须包含MeshRenderer组件";return false;}return true;}[ValidateInput("CheckSpace", "字符串不能有空格", InfoMessageType.Warning)]public string Message = "Dynamic";private bool CheckSpace(string value){return value.IndexOf(' ') < 0;}

6.下拉列表

    [ValueDropdown("TextureSizes")]public int SomeSize1;private static int[] TextureSizes = new int[] { 256, 512, 1024 };[ValueDropdown("FriendlyTextureSizes")]public int SomeSize2;private static IEnumerable FriendlyTextureSizes = new ValueDropdownList<int>(){{ "Small", 256 },{ "Medium", 512 },{ "Large", 1024 },};[ValueDropdown("TreeViewOfInts", ExpandAllMenuItems = true)]public List<int> IntTreview = new List<int>() { 1, 2, 7 };private IEnumerable TreeViewOfInts = new ValueDropdownList<int>(){{ "Node 1/Node 1.1", 1 },{ "Node 1/Node 1.2", 2 },{ "Node 2/Node 2.1", 3 },{ "Node 3/Node 3.1", 4 },{ "Node 3/Node 3.2", 5 },{ "Node 1/Node 3.1/Node 3.1.1", 6 },{ "Node 1/Node 3.1/Node 3.1.2", 7 },};

7.分组

    //水平分组[HorizontalGroup] public float num;[HorizontalGroup, Button(ButtonStyle.Box)]private void Full(float a, float b, out float c){c = a + b;}//Box分组[BoxGroup("Titles")]public int A;[BoxGroup("Titles")]public int B;//按钮分组[ButtonGroup]private void C() { }[ButtonGroup]private void D() { }

8.集合


1.注意序列化字典必须继承SerializedMonoBehaviour,List不需要

public class Odin学习 : SerializedMonoBehaviour
{public Dictionary<int, Material> IntMaterialLookup;[OnInspectorInit]private void CreateData(){IntMaterialLookup = new Dictionary<int, Material>(){{ 1, ExampleHelper.GetMaterial() },{ 7, ExampleHelper.GetMaterial() },};}
}


2.List不加特性也可以使用,拖动左侧的滑块可以调整元素的顺序,TableList可以将List转为表格的形式,点击加号左边的按钮可以切换会原来列表的形式。

    public List<float> FloatList;[Range(0, 1)]public float[] FloatRangeArray;[TableList(ShowIndexLabels = true, AlwaysExpanded = true)]public List<SomeCustomClass> TableListWithIndexLabels = new List<SomeCustomClass>(){new SomeCustomClass(),new SomeCustomClass(),};[Serializable]public class SomeCustomClass{[TableColumnWidth(57)][PreviewField(Alignment = ObjectFieldAlignment.Center)]public Texture Icon;[TextArea]public string A, B;}

9.条件

    public bool IsToggled;[DisableIf("IsToggled")]public int DisableIfToggled;[EnableIf("IsToggled")]public int EnableIfToggled;[DisableInEditorMode]public GameObject A;[DisableInPlayMode]public Material B;[HideIf("IsToggled")]public Vector3 HiddenWhenToggled;[ShowIf("IsToggled")]public Vector2 VisibleWhenToggled;

10.资源列表

 //显示该路径下的材质,路径前面的Assets不用写[AssetList(Path = "Materials/")]public List<Material> AssetList;[AssetList(AssetNamePrefix = "Line")]public List<Material> MaterialsStartingWithLine;

11.窗口

public class Odin窗口 : OdinEditorWindow
{[MenuItem("Tools/简单窗口")]private static void OpenWindow(){var window = GetWindow<Odin窗口>();window.position = GUIHelper.GetEditorWindowRect().AlignCenter(500, 500);}[EnumToggleButtons]public ViewTool SomeField;
}

Unity插件Odin入门相关推荐

  1. 神器-unity插件-Odin

    https://blog.csdn.net/weixin_34221073/article/details/93707400

  2. Asset Store上常用的40个Unity插件汇总——进阶开发者必备Unity插件

    上篇文章着重介绍了Unity Asset Store(Unity资源商店)上一些超棒的资源与素材. unity老司机的资源推荐与常用插件汇总合集 - 简书 Unity插件资源购买小技巧 - 简书 本篇 ...

  3. UnityAR——AR插件Vuforia入门

    AR插件Vuforia入门 一.AR常用插件 链接:Unity工具之常用插件分类汇总 二.Vuforia介绍 Vuforia的SDK支持很多平台,包括iOS.Android.UWP,能够适配市面上大部 ...

  4. “音游制作实用插件-Koreographer入门教程”,“Unity2D 音游案例-节奏大师(基于Koreographer)”

    看着目录来阅读 第一个是免费视频 音游制作实用插件-Koreographer入门教程) 第二个是siki学院的收费视频 Unity2D 音游案例-节奏大师(基于Koreographer) Demo 音 ...

  5. 日落20181218001 - Unity插件应用之ShaderForge制作顶点动画

    环境 系统:Windows 10 引擎:Unity 2017.2.1f1 工具:Shader Forge 1.38 目的 使用Shader Forge制作顶点动画的实例. (1)场景布局如下. (1- ...

  6. 【Unity插件】最多的插件合集

    一.前言 ? 最近整理了一下文章,发现我分享了很多的插件,但是如果要查找某一款插件,还需要去搜索才能找到,很不方面,就想要将写过的所有的插件分享也好,教程也好,做一个汇总,然后这篇文章还会不断的更新, ...

  7. Unity插件之NGUI学习(4)—— 创建UI2DSprite动画

    创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...

  8. Gulp:插件编写入门

    之前挖了个坑,准备写篇gulp插件编写入门的科普文,之后迟迟没有动笔,因为不知道该肿么讲清楚Stream这货,毕竟,gulp插件的实现不像grunt插件的实现那么直观. 好吧,于是决定单刀直入了.文中 ...

  9. Unity插件-NGUI使用教程

    Unity插件-NGUI使用教程 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大 ...

  10. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

最新文章

  1. 《Linux内核分析》实践4
  2. js中json法创建对象(json里面的:相当于js里面的=)
  3. 了解一下JavaScript的未来——ECMAScript5
  4. 快速获取青年大学习完成截图
  5. java中有stdin_在java中听stdin的后台进程
  6. Java——操作集合的工具类:Collections
  7. python esp8266模块_ESP8266使用笔记之常用固件
  8. 9个PHP库简介和下载
  9. flash动画制作成品_「咻动画」flash动画在制作方面有哪些优势?
  10. 怎么把c语言改成汇编语言,如何把汇编语言转换成C语言
  11. 《构建之法》第四章读后感--软件工程
  12. MVVM 架构解析及 Jetpack 架构组件的使用
  13. 用python把pdf文件转换为word文件
  14. 理财学习02-基金误区
  15. ios wifi 定位_iOS中三种定位方式
  16. 笔记:戴蒙德模型——参数变化的影响
  17. 天地图-第五篇-覆盖物
  18. ios 移动社交 app 的demo 附:图文展示,客户端+服务器端源码
  19. Python 爬取留言板留言(全网最少代码!多线程+selenium+Xpath)
  20. 解决 nginx 反向代理时的 upstream timeout 问题

热门文章

  1. 保存为UTF8的1byte文字,2byte文字,3byte文字,4byte文字大全
  2. 初步熟悉RHEL 8
  3. 带你穿越古罗马,元宇宙巴士来啦 #Invisible Cities
  4. 常用z变换及其收敛域
  5. php代码加密工具xend,PHP代码加密工具 Xend v3.0.1
  6. zabbix mysql安装配置_Zabbix安装图解教程 | 系统运维
  7. 树莓派引脚介绍与GPIO的初步认识与应用
  8. 百度贴吧诱导用户操作CPA项目
  9. 陆维家具设计拆单软件
  10. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 ARIMA、AutoARIMA、LSTM、Prophet、多元Prophet 实现