1. 类级别标识
1.1 AddComponentMenu 添加组件菜单
默认的脚本都会出现在”Component->Script”菜单下,在类之前通过AddComponentMenu标识可以设定脚本出现在Component下的其它目录。注意该标识生效需要重启Unity3D。
eg:
[AddComponentMenu("MyTest/Test")]
public class Test : MonoBehaviour
{
}
1.2 ExecuteInEditMode Editor模式下运行
Editor模式下运行三种函数调用的方式如下:
Update() 当Scene视图有改变的时候被调用
OnGUI() 当Game视图收到一个事件的时候被调用
OnRenderObject() Scene或者Game视图重绘时被调用
1.3 RequireComponent 脚本的运行依赖某组件的存在
1.4 Serializable 可序列化
该标识可以使得类(结构)级别的变量显示在检视面板,也能序列化它。
(注意对于JS,不需要该标识,默认类级别的变量是可以序列化的)
(注意要引用命名空间System)
1.5 CustomEditor 自定义某个组件的检视面板样式
格式:[CustomEditor(typeof(XXXX))],详见“Unity3D编辑器扩展”一文。
2. 方法级标识
2.1 ContextMenu 上下文菜单
这是一个方法级的标识,可以为Inspector脚本中添加一个触发事件,示例代码和截图如下所示。 注意ContextMenu不支持多重路径。
[AddComponentMenu("MyTest/Test")]
public class Test : MonoBehaviour
{
[ContextMenu("DoLogTest")]
void DoLogTest()
{
Debug.Log("i am function DoLogTest");
}
[ContextMenu("ShowName")]
void ShowName()
{
Debug.Log(gameObject.name);
}
}
2.2 MenuItem 编辑器扩展添加菜单的目录
详见“Unity3D编辑器扩展”一文,需要引用Unity.Editor命名空间,类需要放到Editor目录下。
3. 变量级标识
3.1 HideInInspector Inspector界面隐藏变量的显示
注意变量仍可以被序列化,只是不在Inspector界面显示而已。
3.2 NonSerialized 不被序列化
不序列化变量,且不显示在检视面板中。(注意要引用命名空间System)
3.3 SerializeField 私有变量序列化
该标识可以将私有变量(所有继承自UnityEngine.Object的类,如GameObject,Component,MonoBehaviour,Texture2D,AnimationClip;所有基本类型,如int,string,float,bool;一些内建类型,如Vector2,Vector3,Quaternion,Color,Rect,Layermask;序列化类型的Array,序列化类型的List;枚举Enum)序列化,使得在检视面板内可以重新设置变量的值,虽然检视面板可见,但仍然是私有变量。
注意该标识不可以序列化静态变量,也不能序列化属性。
3.4 ContextMenuItem
可以为变量(public)添加右键弹出命令,从而执行相关的操作。
该标识接受两个变量,1个是display name,一个是右键弹出菜单点击后的方法。
如下述代码和截图所示:
public class Test : MonoBehaviour
{
[ContextMenuItem("Random Age", "RandomAge")]
public int Age;
void RandomAge()
{
Age = new System.Random(DateTime.Now.Millisecond).Next(1, 100);
}
[ContextMenuItem("Random Name", "RandomName")]
public string Name;
private void RandomName()
{
string[] names = new string[] { "Jack", "Jim", "Tomas", "Han", "Ann" };
Name = names[new System.Random(DateTime.Now.Millisecond).Next(0, 4)];
}
}
3.5 Range/RangeAttribute 变量范围限定
[Range(min,max)]或者[RangeAttribute(min,max)]可以对变量的输入范围进行限定,使得Inspector检视面板内的数值输入框变成Slider,且范围为(min,max)。