Unity插件Odin简要入门
- 这几天我把Odin在Unity商城里半价买了下来,Odin真是香的一
- 有感而发,做出了这么一个入门教程
一:介绍
- Odin是一个专门用来美化Unity的检视面板的API类插件
- Odin主要是拓展了Unity里的Object的参数属性标签,例如原版的
[SerializeField]
二:注意事项
- 先创建一个脚本做演示,然后将此脚本挂载到某场景物体上
- 在调用之前,需要做引用
using Sirenix.OdinInspector;
- 点击工具栏里的
Tools -> Odin Inspector -> Attribute Overview
可以查看Unity内嵌教程
三:常用功能
颜色
[GUIColor()]
——对界面的颜色进行修改
1 2
| [GUIColor(1.0f, 0.3f, 0.6f)] public int myInt_1 = 0;
|
标题
[Title()]
——在下列参数之前做标题提示
1 2 3 4 5 6 7 8
| [Title("Title One")] public int myInt_1 = 0; [Title("Title Two", "Lil Title One")] public int myInt_2 = 0; [Title("Title Three", "Lil Title One", TitleAlignments.Centered)] public int myInt_3 = 0;
|
只读
[ReadOnly]
——在检视面板里显示,但是不能修改
1 2
| [ReadOnly] public int myInt_1 = 0;
|
数值规范化
[ValueDropdown()]
——规定某数值只能选取某静态数组或枚举数中规定的数值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [ValueDropdown("ValueGroup_1")] public int myInt_1;
[ValueDropdown("ValueGroup_2")] public int myInt_2;
private static int[] ValueGroup_1 = new int[] { 256, 512, 1024 };
private static IEnumerable ValueGroup_2 = new ValueDropdownList<int>() { { "Small", 256 }, { "Medium", 512 }, { "Large", 1024 } };
|
预制体与场景物体限定
[AssetsOnly]
——只允许拖入预制体
[SceneObjectsOnly]
——只允许拖入场景物体
1 2 3 4 5
| [AssetsOnly] public GameObject myGO_1;
[SceneObjectsOnly] public GameObject myGO_2;
|
隐藏标签
[HideLabel]
——隐藏参数的外部描述标签
1 2
| [HideLabel] public int myInt_1;
|
标签文字修改
[LabelText()]
——修改参数的标签文字
1 2
| [LabelText("我的整数")] public int myInt_1;
|
标签文字长度
[LabelWidth()]
——修改参数的标签文字长度
1 2
| [LabelWidth(250)] public int myInt_1;
|
提示
[InfoBox()]
——在参数前添加一个提示框
1 2 3 4 5 6 7 8
| [InfoBox("提示", InfoMessageType.Info)] public int myInt_1;
[InfoBox("警告", InfoMessageType.Warning)] public int myInt_2;
[InfoBox("报错", InfoMessageType.Error)] public int myInt_3;
|
值修改事件
[OnValueChanged()]
——当参数被修改时,触发一个函数
1 2 3 4 5 6 7
| [OnValueChanged("On_myInt_1_Changed")] public int myInt_1;
private void On_myInt_1_Changed() { print("值被修改"); }
|
内联标签
[SuffixLabel()]
——在参数行的末尾显示一个子标签,通常是注释或者是单位提示
1 2 3 4 5 6 7 8
| [SuffixLabel("内部标签")] public int myInt_1;
[SuffixLabel("内部标签", Overlay = true)] public int myInt_2;
[SuffixLabel("$myInt_3")] public int myInt_3;
|
按钮
[Button()]
——修饰一个函数,将其暴露成按钮
1 2 3 4 5
| [Button("按钮", ButtonSizes.Large)] private void Slot_MyButton() { print("触发按钮"); }
|
四:打组
盒型组
[BoxGroup()]
——使用相同名称可以隶属于同一盒型组
1 2 3 4 5 6 7 8
| [BoxGroup("组1")] public int myInt_1;
[BoxGroup("组1")] public int myInt_2;
[BoxGroup("组2")] public int myInt_3;
|
按钮组
[ButtonGroup()]
——将多个按钮限制到同一排,根据名称不同可以放在不同排
1 2 3 4 5 6 7 8 9 10 11 12 13
| [ButtonGroup("ButtonGroup1")] [Button("按钮1", ButtonSizes.Large)] private void Slot_MyButton1() { print("触发按钮1"); }
[ButtonGroup("ButtonGroup1")] [Button("按钮2", ButtonSizes.Large)] private void Slot_MyButton2() { print("触发按钮2"); }
|
折页组
[FoldoutGroup()]
——使用相同名称可以隶属于同一折页组,提供折页功能
1 2 3 4 5 6 7 8
| [FoldoutGroup("组1")] public int myInt_1;
[FoldoutGroup("组1")] public int myInt_2;
[FoldoutGroup("组2")] public int myInt_3;
|
横排组
[HorizontalGroup()]
——使用相同名称可以隶属于同一横排组
1 2 3 4 5 6 7 8
| [HorizontalGroup("组1")] public int myInt_1;
[HorizontalGroup("组1")] public int myInt_2;
[HorizontalGroup("组2")] public int myInt_3;
|
页面组
[TabGroup()]
——使用相同名称可以隶属于同一页面组,提供翻页功能
1 2 3 4 5 6 7 8
| [TabGroup("组1")] public int myInt_1;
[TabGroup("组1")] public int myInt_2;
[TabGroup("组2")] public int myInt_3;
|
勾选组
[ToggleGroup()]
——使用相同名称可以隶属于同一勾选组,同一个勾选组绑定一个布尔值来控制只读
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [ToggleGroup("toggle_1")] public bool toggle_1;
[ToggleGroup("toggle_1")] public int myInt_1;
[ToggleGroup("toggle_1")] public int myInt_2;
[ToggleGroup("toggle_2")] public bool toggle_2;
[ToggleGroup("toggle_2")] public int myInt_3;
|
条件组
[ShowIfGroup()]
——使用相同名称可以隶属于同一条件组,同一个条件组绑定一个布尔值来控制显示
1 2 3 4 5 6 7 8 9 10 11 12
| public bool toggle_1;
[ShowIfGroup("toggle_1"), BoxGroup("toggle_1/组1")] public int myInt_1;
[ShowIfGroup("toggle_1"), BoxGroup("toggle_1/组1")] public int myInt_2;
public bool toggle_2;
[ShowIfGroup("toggle_2"), BoxGroup("toggle_2/组2")] public int myInt_3;
|
五:特定数值类型
数值大小限制
[MinValue]
——最小值限定
[MaxValue]
——最大值限定
[MinMaxSlider]
——通过最小值与最大值限定的方式来限定二维向量,不能精准修改浮点
[Wrap]
——最小值与最大值相连
1 2 3 4 5 6 7 8 9 10 11
| [MinValue(20), MaxValue(30)] public int myInt_1;
[MinMaxSlider(20, 30)] public Vector2Int myVector2Int_1;
[MinMaxSlider(20.0f, 30.0f)] public Vector2 myVector2_1;
[Wrap(0f, 10f)] public float myFloat_1;
|
滑动条
[ProgressBar()]
——将数字转化成滑动条输入
1 2 3 4 5
| [ProgressBar(0, 100, r:1.0f, g:0.2f, b:0.6f, Height=20)] public int myInt_1;
[ProgressBar(0, 10, Segmented=true)] public int myInt_2;
|
调色板
- 点击工具栏里的
Tools -> Odin Inspector -> Preferences -> Color Palettes
可以查看调色板配置文件
[ColorPalette()]
——使用调色板来快捷选择颜色
1 2
| [ColorPalette] public Color myColor_1;
|
仅显示文字
[DisplayAsString]
——将文字直截了当地显示在检视面板里
1 2
| [DisplayAsString, HideLabel] public string myString_1 = "这是一段文字。";
|
枚举类型
[EnumPaging]
——提供枚举类型的一些辅助按钮
[EnumToggleButtons]
——使用按钮组的方式来显示枚举数
1 2 3 4 5 6 7 8 9 10 11 12
| [EnumPaging] public MyEnum myEnum_1;
[EnumToggleButtons] public MyEnum myEnum_2;
public enum MyEnum { First, Second, Third }
|
文件路径
[FilePath]
——提供文件路径搜索按钮
[FolderPath]
——提供文件夹路径搜索按钮
1 2 3 4 5 6 7 8
| [FilePath] public string myString_1;
[FilePath(ParentFolder = "Assets/Resources")] public string myString_2;
[FilePath(ParentFolder = "Assets/Resources", AbsolutePath = true)] public string myString_3;
|
预览区
[PreviewField]
——创建物体预览区
1 2 3 4 5 6 7 8 9
| [PreviewField] public Object myObject_1;
[VerticalGroup("VG_1/HG_1")] public string A, B, C;
[PreviewField(50, ObjectFieldAlignment.Right), HideLabel] [HorizontalGroup("VG_1", 50), VerticalGroup("VG_1/HG_2")] public Object myObject_2;
|