1、UnityEditor 类中的Attribute

该package为Editor开发专用。

  • 【InitializeOnLoadAttribute】 在Class上使用,可以在Unity启动的时候,运行Editor脚本。需要该Class拥有静态的构造函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    using UnityEngine;
    using UnityEditor;

    [InitializeOnLoad]
    class MyClass
    {
    static MyClass ()
    {
    EditorApplication.update += Update;
    Debug.Log("Up and running");
    }

    static void Update ()
    {
    Debug.Log("Updating");
    }
    }

  • 【InitializeOnLoadMethodAttribute】 在Method上使用,是InitializeOnLoad的Method版本。Method必须是static的。

  • 【MenuItem】 在Editor中创建一个菜单项。需要方法为static。

  • 【PreferenceItem】 使用该属性可以定制Unity的Preference界面。

2、UnityEditor.Callbacks 类中的Attribute

  • 【OnOpenAssetAttribute】 在打开一个Asset后被调用。

  • 【PostProcessBuildAttribute】 在build完成后被调用。

  • 【PostProcessSceneAttribute】 在Scene build完成后被调用。

3、UnityEngine 类中的Attribute

  • 【AddComponentMenu】 将带有此属性的Script添加到 Add component 菜单选项中。

  • 【AssemblyIsEditorAssembly】 汇编级属性,使用该属性的Class会被认为是EditorClass。

  • 【ContextMenu】在组件的上下文菜单中添加选项。

  • 【ContextMenuItem】在inspector中的组件成员变量添加上下文菜单。

  • 【PropertyAttribute】用于自定义Attribute。

  • 【CreateAssetMenu】用于创建自定义Asset。

    1
    2
    3
    4
    5
    6
    7
    [CreateAssetMenu(fileName = "default file name", menuName = "My Content/Create Player Scriptable Object", order = 0)]
    public class PlayerData : ScriptableObject
    {
    public string m_name;
    public int m_health;
    public Color m_color;
    }
  • 【Header】 用于在 Inspector 显示的变量添加头部提示。

    1
    2
    3
    4
    5
    6
    7
    8
    public class ExampleClass : MonoBehaviour 
    {
    [Header("生命值")]
    public int CurrentHP = 0;

    [Header("魔法值")]
    public int CurrentMP = 0;
    }
  • 【HideInInspector】 用于取消Public变量在 Inspector 中显示。

    1
    2
    3
    4
    5
    public class ExampleClass : MonoBehaviour 
    {
    [HideInInspector]
    public string Name;
    }
  • 【Range】 用限制int或float类型的输入范围。

    1
    2
    3
    4
    5
    public class ExampleClass : MonoBehaviour 
    {
    [Range(0, 100)]
    public int HP;
    }
  • 【RequireComponent】 在Class上使用,添加对另一个Component的依赖。

    1
    2
    3
    4
    5
    [RequireComponent(typeof(AComponent))]
    public class BComponent : MonoBehaviour
    {

    }
  • 【RuntimeInitializeOnLoadMethod】
    在游戏启动时,会自动调用添加了该属性的方法。(仅在Unity5上可用)

    1
    2
    3
    4
    5
    6
    7
    8
    class MyClass
    {
    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeMethodLoad ()
    {
    Debug.Log("Game loaded and is running");
    }
    }
  • 【SelectionBaseAttribute】
    当一个GameObject含有使用了该属性的Component的时候,在SceneView中选择该GameObject,Hierarchy上面会自动选中该GameObject的Parent。

  • 【SerializeField】
    在变量上使用该属性,可以强制该变量进行序列化。即可以在Editor上对变量的值进行编辑,即使变量是private的也可以。(public 默认带此属性,通过HideInInspector隐藏)

    1
    2
    3
    4
    5
    public class TestSerializeField : MonoBehaviour 
    {
    [SerializeField]
    private string name;
    }
  • 【Space】
    使用该属性可以在Inspector上增加一些空白行。

    1
    2
    3
    4
    5
    6
    public class Test : MonoBehaviour 
    {
    public int AAA = 0;
    [Space(10)]
    public int BBB = 0;
    }
  • 【Tooltip】
    使用该属性可以在Inspector上的变量增加一条提示,当鼠标指针指向变量时显示。

    1
    2
    3
    4
    5
    public class Test : MonoBehaviour 
    {
    [Tooltip("This year is 2015!")]
    public int year = 0;
    }

4、UnityEngine.Serialization 类中的Attribute

  • 【FormerlySerializedAsAttribute】 该属性可以令变量以另外的名称进行序列化,并且在变量自身修改名称的时候,不会丢失之前的序列化的值。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    using UnityEngine;
    using UnityEngine.Serialization;
    public class MyClass : MonoBehaviour
    {
    [FormerlySerializedAs("myValue")]
    private string m_MyValue;
    public string myValue
    {
    get { return m_MyValue; }
    set { m_MyValue = value; }
    }
    }