Unity Attribute属性
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
18using UnityEngine;
using UnityEditor;
[ ]
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[ ]
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
8public class ExampleClass : MonoBehaviour
{
[ ]
public int CurrentHP = 0;
[ ]
public int CurrentMP = 0;
}【HideInInspector】 用于取消Public变量在 Inspector 中显示。
1
2
3
4
5public class ExampleClass : MonoBehaviour
{
[ ]
public string Name;
}【Range】 用限制int或float类型的输入范围。
1
2
3
4
5public class ExampleClass : MonoBehaviour
{
[ ]
public int HP;
}【RequireComponent】 在Class上使用,添加对另一个Component的依赖。
1
2
3
4
5[ ]
public class BComponent : MonoBehaviour
{
}【RuntimeInitializeOnLoadMethod】
在游戏启动时,会自动调用添加了该属性的方法。(仅在Unity5上可用)1
2
3
4
5
6
7
8class MyClass
{
[ ]
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
5public class TestSerializeField : MonoBehaviour
{
[ ]
private string name;
}【Space】
使用该属性可以在Inspector上增加一些空白行。1
2
3
4
5
6public class Test : MonoBehaviour
{
public int AAA = 0;
[ ]
public int BBB = 0;
}【Tooltip】
使用该属性可以在Inspector上的变量增加一条提示,当鼠标指针指向变量时显示。1
2
3
4
5public class Test : MonoBehaviour
{
[ ]
public int year = 0;
}
4、UnityEngine.Serialization 类中的Attribute
- 【FormerlySerializedAsAttribute】 该属性可以令变量以另外的名称进行序列化,并且在变量自身修改名称的时候,不会丢失之前的序列化的值。
1
2
3
4
5
6
7
8
9
10
11
12
13using UnityEngine;
using UnityEngine.Serialization;
public class MyClass : MonoBehaviour
{
[ ]
private string m_MyValue;
public string myValue
{
get { return m_MyValue; }
set { m_MyValue = value; }
}
}