Unity插件之Odin 2.inspector使用-Meta

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中说明

示例

Unity插件之Odin 2.inspector使用-Meta_第1张图片
Odin-TitleAttribute


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中说明

示例

Unity插件之Odin 2.inspector使用-Meta_第2张图片
Odin-InfoBoxAttribute


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中说明

示例

Unity插件之Odin 2.inspector使用-Meta_第3张图片
Odin-SuffixLabelAttribute


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中说明

示例

Unity插件之Odin 2.inspector使用-Meta_第4张图片
Odin-GUIColorAttribute


IndentAttribute

简介

使用此属性标签后绘制时会向右缩进一定的量

API详解

  • Fields

    类 型 名 称 说 明
    int IndentLevel IndentLevel
  • Properties

  • Constructors

    参 数 描 述
    int indentLevel = 1 各个参数的含义参见Fields中说明

示例

Unity插件之Odin 2.inspector使用-Meta_第5张图片
Odin-IndentAttribute


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

示例



你可能感兴趣的:(Unity插件之Odin 2.inspector使用-Meta)