修饰类
RequireComponent
在添加此脚本时,需要已经存在的其它脚本;不存在直接添加。
[RequireComponent(typeof(Rigidbody))]
public class Test : MonoBehaviour
{
}
CreateAssetMenuAttribute
添加菜单项到Create菜单,通常用来创建自定义的ScriptableObject。
[CreateAssetMenu(fileName="sceneData.asset",menuName="Scene Data")]
public class SceneData : ScriptableObject
{
public int ID;
public string Name;
public Vector3[] BornPoint;
}
AddComponentMenu
修饰MonoBehaviour,添加菜单项到AddComponent菜单,可以将一些自定义的组件添加进来,方便策划人员添加组件。
[AddComponentMenu("Motion/StraightMove")]
public class StraightMove : MonoBehaviour {
public float speed;
void Start () {
}
void Update () {
}
}
DisallowMultipleComponent
修饰MonoBehaviour,当前gameObject上只能添加一个此脚本。
[DisallowMultipleComponent]
public class Test : MonoBehaviour
{
}
手动添加时,会弹出以下窗口
实际测试,在代码中再次添加这个脚本,也不会成功,会在Console提示信息,同时AddComponent返回的对象为null。
ExecuteInEditMode
修饰MonoBehaviour,使脚本在场景没有Play,部分事件方法也可以运行。
- Awake
- Update 只有场景中的东西被修改时,才会执行。
- OnGUI 通过事件的方式判断具体操作
- OnRenderObject
https://docs.unity3d.com/560/Documentation/ScriptReference/ExecuteInEditMode.html
PreferBinarySerialization
ScriptObject使用二进制序列化,以提升读写性能,但源文件变得不可读,同时版本控制中不能merge。
[PreferBinarySerialization]
public class MyData : ScriptableObject
{
public float[] lotsOfFloatData = new[] { 1f, 2f, 3f };
public byte[] lotsOfByteData = new byte[] { 4, 5, 6 };
}
SharedBetweenAnimators
修饰StateMachineBehaviour,指定此脚本在多个Stage中共用。
ImageEffect
ImageEffectAllowedInSceneView
屏幕特效在Scene相机也具有ImageEffect
ImageEffectOpaque
指定ImageEffect在Opaque之后,但在Transparent之后渲染
修饰字段
Multiline
字符串多行显示
[Multiline(4)]
public string Description;
TextArea
带滚动条的文本编辑框
[TextArea]
public string Description;
Range
设置int, float的数值范围,以滑块的方式显示。
[Range(0,1)]
public float alpha;
Tooltip
[Tooltip("Health value between 0 and 100.")]
public int health = 0;
SerializeField
让私有的字段也可以在Inspector中编辑
[SerializeField]
private int gold;
https://docs.unity3d.com/560/Documentation/ScriptReference/SerializeField.html
ColorUsageAttribute
修饰Color字段,用来设置颜色选择器的一些属性,是否显示Alpha,最大亮度,最小亮度等等。
[ColorUsage(true)]
public Color col;
ContextMenuItem
修饰字段,在Inspector中在字段名上右键,弹出菜单,点击会执行设置的方法。
[ContextMenuItem("AddMr.", "AddMr")]
public string Name = "";
public void AddMr()
{
Name = "Mr. " + Name;
}
Delayed
修饰基本类型字段,只有在焦点移除或按了回车,更改才会生效。国为正常情况下,在Inspector中修改了字段,就立马生效了,有时候希望只有确定后才生效。
[Delayed]
public string Name = "";
可以在Update中打印Name的值,只有按回车后,或焦点移除后,Name的值才会更新。
Header
设置字段在Inspector上显示的分组名字
public string name;
[Header("HP setting")]
public int hp;
public int maxHP;
[Header("Money Setting")]
public int diamond;
public int gold;
Space
字段间分隔几行
public string Name;
[Space(50)]
public int Age;
HideInInspector
在Inspector中隐藏某个字段,避免公共的字段被修改
[[HideInInspector]
public int p = 5;
修饰方法
ContextMenu
修饰MonoBehaviour的非静态方法,在Inspector面板中脚本上右键,弹出的菜单中,添加菜单项,用来触发这个方法。
[ContextMenu ("Do Something")]
void DoSomething()
{
Debug.Log ("Do");
}
RuntimeInitializeOnLoadMethod
修饰静态方法,当游戏启动后,自动调用此方法。但是启动顺序无法保证。
class MyClass{
[RuntimeInitializeOnLoadMethod]
static void OnRuntimeMethodLoad()
{
Debug.Log("After scene is loaded and game is running");
}
}
RPC
本地远程都存在的RPC方法。
https://docs.unity3d.com/560/Documentation/ScriptReference/AddComponentMenu.html
https://docs.unity3d.com/560/Documentation/ScriptReference/CanEditMultipleObjects.html