首页 > Personal > unity 脚本Attributes
2014
10-16

unity 脚本Attributes

[System.Serializable] 序列化一个自定义类,该类可以显示在Inspector中。
[System.Serializable]
class A {
public int a = 0;
}
可以把类A序列化,并且显示在Inspector中,如果类被abstract修饰,即便赋值为继承类,也不能显示。

public变量默认是序列化的,但是被readonly、 const、static修饰的变量是不会序列化的。
序列化的变量的值会保存在二进制文件中,游戏启动时会赋相应的值。

[System.NonSerialized] 让序列化变量不在序列化,并且也不会在显示在Inspector中。
[System.NonSerialized]
public int a = 0;

protected、private变量默认是不会被序列化的。

[SerializeField] 序列化不会被序列化的变量。
[SerializeField]
private int a = 0;

[HideInInspector] 隐藏变量不在Inspector中显示,但是还是会序列化。
[HideInInspector]
public int a = 0;

[HideInInspector]
[SerializeField]
private int a = 0;
这样表示变量a,可以被序列化,但是不显示在Inspector中。

[AddComponentMenu] 在Component菜单中加入新的菜单,可以把类添加到scripts上一层菜单中。
[AddComponentMenu(“Test/TestScript”)]
public class TestScript: MonoBehaviour {
}

[MenuItem] 自定义菜单,添加一个自定义的EditorWindow,OnGUI用来布局ui。
public class Test: EditorWindow {
[MenuItem(“Test/Test”)]
static void Init() {
Test test = (Test)EditorWindow.GetWindow(typeof(Test));
test.Show();
}

void OnGUI() {
if (GUI.Button(new Rect(10,10,200,20),”test”)) {
Debug.Log(“test”);
}
}
}

[ContextMenu] 在脚本组件Inspector中添加属性菜单,和删除组件空间在一起。
用法:
[ContextMenu(“Test”)]
void Test() {
}

[ExecuteInEditMode] 强制类的Awake、Start、OnGUI和Update等函数在编辑模式会被调用。
[ExecuteInEditMode]
public class Test : MonoBehaviour {
void Awake () {
}

void Start () {
}
}

[RequireComponent] 强制添加一个组件,并且不能删除。
[RequireComponent(typeof(Rigidbody))]
public class Test : MonoBehaviour {
void Awake () {
Rigidbody body = GetComponent();
}
}

[RenderBeforeQueues] 自定义渲染顺序。没太明白。

编译器属性
属性 介绍 用例
ContextMenu 在当前脚本的组件中添加右键菜单内容

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。