Unity插件之Odin 2.inspector使用-Meta
简介
Odin定义了很多的属性标签,通过这些属性标签很大程度上增强了编辑器功能,本文将详细介绍如下属性标签:
- PropertySpace
- TypeInfoBox
- CustomValueDrawer
- Title
- DisplayAsString
- InfoBox
- DetailedInfoBox
- PropertyTooltip
- LabelText
- SuffixLabel
- HideLabel
- OnInspectorGUI
- GUIColor
- Indent
- PropertyOrder
- HideMonoScript
- ShowInInspector
- ShowDrawerChain
声明
本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。
如果您进行转载,请标明出处。
Unity插件之Odin 2.inspector使用-Meta(http://www.liyubin.com/articles/2019/03/26/1553609524784.html)
API详解
PropertySpaceAttribute
简介
使用此属性标签可以在绘制前后添加一定量的距离,类似于Unity中的SpaceAttribute
API详解
-
Fields
类 型 名 称 说 明 float SpaceBefore 在绘制此属性前添加空余空间 float SpaceAfter 在绘制此属性后添加空余空间 Properties
-
Constructors
参 数 描 述 无 ---- float spaceBefore 各个参数的含义参见Fields中说明 float spaceBefore, float spaceAfter 各个参数的含义参见Fields中说明
示例
TypeInfoBoxAttribute
简介
使用TypeInfoBox属性标签,仅可应用于Class、Interface和Struct类型,使用此属性标签后,可以在属性面板类型的最顶部添加一个信息框。
API详解
-
Fields
类 型 名 称 说 明 string Message 信息框中显示的文本内容 Properties
-
Constructors
参 数 描 述 string message 信息框中显示的文本内容
示例
[TypeInfoBox("This is my component and it is mine.")]
public class MyComponent : MonoBehaviour
{
}
CustomValueDrawerAttribute
简介
使用此属性标签,可以自定义绘制的方式
API详解
-
Fields
类 型 名 称 说 明 string MethodName 绘制时需要调用的函数的名称 Properties
Constructors
示例
public class CustomValueDrawerExamples : MonoBehaviour
{
public float From = 2, To = 7;
[CustomValueDrawer("MyStaticCustomDrawerStatic")]
public float CustomDrawerStatic;
[CustomValueDrawer("MyStaticCustomDrawerInstance")]
public float CustomDrawerInstance;
[CustomValueDrawer("MyStaticCustomDrawerArray")]
public float[] CustomDrawerArray;
private static float MyStaticCustomDrawerStatic(float value, GUIContent label)
{
return EditorGUILayout.Slider(label, value, 0f, 10f);
}
private float MyStaticCustomDrawerInstance(float value, GUIContent label)
{
return EditorGUILayout.Slider(label, value, this.From, this.To);
}
private float MyStaticCustomDrawerArray(float value, GUIContent label)
{
return EditorGUILayout.Slider(value, this.From, this.To);
}
}
TitleAttribute
简介
使用Title属性标签可以在属性之前绘制一个使用粗体显示的标题头,可适用于所有的类型
API详解
-
Fields
类 型 名 称 说 明 string Title 在属性面板中绘制时显示的标题内容 string Subtitle 可选择使用的子标题 bool Bold 标题是否使用粗体显示 bool HorizontalLine 在标题与属性之间是否绘制一条水平线 Properties
-
Constructors
参 数 描 述 string title, string subtitle = null, TitleAlignments titleAlignment = TitleAlignments.Left, bool horizontalLine = true, bool bold = true 各个参数的含义参见Fields中说明
示例
DisplayAsStringAttribute
简介
使用此属性标签,可以其绘制成最基本的文本形式
PS:此属性标签使用ToString方法将值转成文本用于显示
API详解
-
Fields
类 型 名 称 说 明 bool Overflow 当文本在面板中空间不足是否使用overflow模式 Properties
-
Constructors
参 数 描 述 无 ---- bool overflow 各个参数的含义参见Fields中说明
示例
public class MyComponent : MonoBehaviour
{
[DisplayAsString]
public string MyInt = 5;
[DisplayAsString, HideLabel]
public string MyMessage = "This string will be displayed as text in the inspector";
[DisplayAsString(false)]
public string InlineMessage = "This string is very long, but has been configured to not overflow.";
}
InfoBoxAttribute
简介
此属性标签可以用于标记任何属性,此用此标签后将会在属性字段之前绘制一个文本区域,可以用来做提示信息,或者做为警告提醒
API详解
-
Fields
类 型 名 称 说 明 string Message 显示的文本内容 InfoMessageType InfoMessageType 信息提示类型(None,Info,Warning,Error) string VisibleIf 可选字段,可以指定一个方法、属性或字段名称,根据其值或返回值来判断是否显示文本框 bool GUIAlwaysEnabled GUI是否一直激活状态。如果值为True,绘制时将会忽略GUI.enable的值进行绘制 Properties
-
Constructors
参 数 描 述 string message, InfoMessageType infoMessageType = InfoMessageType.Info, string visibleIfMemberName = null 各个参数的含义参见Fields中说明
示例
DetailedInfoBoxAttribute
简介
使用此属性标签可以添加一个消息框,并且点击后可以显示详细的信息内容
API详解
-
Fields
类 型 名 称 说 明 string Message 用于显示的文本 string Details 详细的说明 InfoMessageType InfoMessageType 信息类型(None,Info,Warning,Error) string VisibleIf 字段、属性或者方法的名称,其返回值为bool,用于表示是否需要显示 Properties
-
Constructors
参 数 描 述 string message, string details, InfoMessageType infoMessageType = InfoMessageType.Info, string visibleIf = null 各个参数的含义参见Fields中说明
示例
public class DetailedInfoBoxExamples : MonoBehaviour
{
[DetailedInfoBox("This is a Int value","It was used to control the blood")]
public int intValue;
[DetailedInfoBox("Int value 2","Details for value2",InfoMessageType.Error)]
public int intValue2;
[DetailedInfoBox("Int Value 3","Details for value3",InfoMessageType.Info,"isVisible")]
public int intValue3;
public bool isVisible;
}
PropertyTooltipAttribute
简介
使用此属性标签可以为其添加提示
PS:此属性标签与Unity自身的UnityEngine.TooltipAttribute有些类似
API详解
-
Fields
类 型 名 称 说 明 string Tooltip 显示的提示文本内容 Properties
-
Constructors
参 数 描 述 string tooltip 各个参数的含义参见Fields中说明
示例
public class MyComponent : MonoBehaviour
{
[PropertyTooltip("This is an int property.")]
public int MyField;
[ShowInInspector, PropertyTooltip("This is another int property.")]
public int MyProperty { get; set; }
}
LabelTextAttribute
简介
默认情况下在显示时直接使用字段、属性或者方法的名称做为文本的内容,使用此属性标签可以替换原来的文本内容
API详解
-
Fields
类 型 名 称 说 明 string Text 用于显示的文本 Properties
-
Constructors
参 数 描 述 string text 各个参数的含义参见Fields中说明
示例
public MyComponent : MonoBehaviour
{
[LabelText("1")]
public int MyInt1;
[LabelText("2")]
public int MyInt2;
[LabelText("3")]
public int MyInt3;
}
SuffixLabelAttribute
简介
API详解
-
Fields
类 型 名 称 说 明 string Label 在末尾用于显示的文本 bool Overlay 是否在上方显示,显示内容将浮于绘制之上 Properties
-
Constructors
参 数 描 述 string label, bool overlay = false 各个参数的含义参见Fields中说明
示例
HideLabelAttribute
简介
HideLabe属性标签可以隐藏属性的名称标签
API详解
- Fields
- Properties
- Constructors
示例
public class MyComponent : MonoBehaviour
{
[HideLabel]
public GameObject MyGameObjectWithoutLabel;
}
OnInspectorGUIAttribute
简介
使用此标签可以自定义一个可以在属性面板中绘制的方式。
API详解
-
Fields
类 型 名 称 说 明 string PrependMethodName 在字段、属性绘制之前会调用的方法的名称 string AppendMethodName 在字段、属性绘制之后会调用的方法的名称 Properties
-
Constructors
参 数 描 述 无 ---- string methodName, bool append = true methodName指定一个绘制方法,append表示绘制方法是在之前还是在之后执行。append为true时表示之后调用绘制方法 string prependMethodName, string appendMethodName 各个参数的含义参见Fields中说明
示例
public MyComponent : MonoBehaviour
{
[OnInspectorGUI("GUIBefore", "GUIAfter")]
public int MyField;
private void GUIBefore()
{
GUILayout.Label("Label before My Field property");
}
private void GUIAfter()
{
GUILayout.Label("Label after My Field property");
}
}
GUIColorAttribute
简介
API详解
-
Fields
类 型 名 称 说 明 Color Color 使用的颜色 string GetColor 字段、属性或者方法的名称,其返回值是Color,static和instance方法名都是可以的 Properties
-
Constructors
参 数 描 述 float r, float g, float b, float a = 1f 使用RGBA来指定绘制使用的颜色 string getColor 各个参数的含义参见Fields中说明
示例
IndentAttribute
简介
使用此属性标签后绘制时会向右缩进一定的量
API详解
-
Fields
类 型 名 称 说 明 int IndentLevel IndentLevel Properties
-
Constructors
参 数 描 述 int indentLevel = 1 各个参数的含义参见Fields中说明
示例
PropertyOrderAttribute
简介
PropertyOrder可以指定属性的绘制优先级,从而重新定义属性显示的顺序
设定的值小的将会在绘制时提前绘制
API详解
-
Fields
类 型 名 称 说 明 int Order 顺序值 Properties
-
Constructors
参 数 描 述 无参 ---- int order 各个参数的含义参见Fields中说明
示例
public class MyComponent : MonoBehaviour
{
[PropertyOrder(1)]
public int MySecondProperty;
[PropertyOrder(-1)]
public int MyFirstProperty;
}
HideMonoScriptAttribute
简介
使用此属性标签后将会隐藏Unity在属性面板中对脚本的绘制
PS:此属性标签仅适于用class
API详解
- Fields
- Properties
- Constructors
示例
ShowInInspectorAttribute
简介
使用此标签后,字段可以在属性面板中显示。
PS:此字段可用于属性、字段;即使是私有的属性、字段,添加此标签后也会显示。同时需要注意的是变量显示绘制,并不意味着其会被序列化
API详解
- Fields
- Properties
- Constructors
示例
public class ShowInInspectorExamples : MonoBehaviour
{
[ShowInInspector]
private int myPrivateInt;
[ShowInInspector]
public int MyPropertyInt { get; set; }
[ShowInInspector]
public int ReadOnlyProperty
{
get { return this.myPrivateInt; }
}
[ShowInInspector]
public Vector3 WorldSpacePosition
{
get { return this.transform.position; }
set { this.transform.position = value; }
}
}
ShowDrawerChainAttribute
简介
使用此属性标签后,可以在面板中列出Odin绘制时调用的prepend、append和value drawer。可用于调试阶段,能够清楚查看到绘制过程
API详解
- Fields
- Properties
- Constructors