特性
让类在编辑模式执行
[ExecuteInEditMode]
public class ShaderTest : MonoBehaviour{}
//限定int或float的取值范围,面板显示Slider条
[Range(0,5)]
public int count;
//面板字段之间的空白空间
public int num;
[Space(30)]
public int count;
//设置标题,粗体字
[Header("Title")]
public string levelName;
带可滚动的文本区域,如果字符串比较长,比较适用。参数:TextArea(最小行数,最大行数);超过最大行数,会出现滚动条。
[TextArea(1,5)]
public string abc;
提示信息,当鼠标移到Inspector上时显示相应的提示
[Tooltip("设置人物名字")]
public string name;
//在父类面板里 曝光子类public变量 或者内部类
class B{} 没有继承Mono
在父类里使用:
[Serializable]
public B b;
//让私有变量显示在Inspector面板 ,并且可以赋值
[SerializeField]
private B b;
public变量不暴露显示在Inspector面板
[NonSerialized]
public B b;
让一个可被序列化的字段,不要显示在Inspector面板中,防止修改。
[HideInInspector]
public int p = 5;
字段菜单,在Inspector面板中,为abc字段添加2个快捷的菜单"Reset", "ResetString"。
[Multiline][ContextMenuItem("Reset", "ResetString")]
public string abc;
public void ResetString()
{
abc = "";
}
类菜单,右键类组件面板右上角时弹出.菜单调用方法(单击右键),作用执行一些edit操作 比如批量设置Rigidbody质量啊 碰撞器范围啊等
[ContextMenu("ReSet")]
void ReSet(){} //不用加public
u3d编辑器的菜单栏
要在编辑器的菜单栏中选择执行编写的函数,可在函数前添加MenuItem属性,如下代码所示:
[MenuItem("MyMenu/Do Something")]
static void DoSomething()
{
}
颜色选择器,color picker,只能应用在Color字段上。默认参数为是否显示alpha,
参数:
hdr:是否将颜色视为HDR颜色(默认为false) true显示透明通道,当== false)]隐藏透明通道此时alpha默认为1
minBrightness: 使用HDR颜色选择器时的最低允许HDR颜色分量值(默认值:0)。
maxBrightness: 使用HDR颜色选择器时的最大允许HDR颜色分量值(默认值:8)。
minExposureValue: HDR颜色选择器中允许的最小曝光值(默认值:1/8 = 0.125)。
maxExposureValue: HDR颜色选择器中允许的最大曝光值(默认值:3)。
[ColorUsage(true, true, 0, 8, 0.125f, 3)]
public Color color3;
[ColorUsage(true)]//显示透明通道
public Color color1;
用于在脚本中使float,int或string变量的属性被延迟。只有按了回车或焦点离开字段才会返回新值。
[Delayed]
public float speed=3;
让类在编辑模式执行
[ExecuteInEditMode]
public class ShaderTest : MonoBehaviour{}
该组件后自动添加依赖组件,类前面加
[RequireComponent(typeof(Rigidbody))]
public class ShaderTest : MonoBehaviour{}
//修饰类型和方法,配置该属性,使它禁用自动Null检查和自动数组边界检查。这样可以加速代码的执行,有时可以大幅加快速度。
[Il2CppSetOptionAttribute(Option.NullChecks,false)]
void Function()
{
}
在运行时,当前类初始化完成,自动调用被该特性应用的静态函数,这和static静态构造函数还不一样,static静态构造函数是在所有的方法之前运行的,而RuntimeInitializeOnLoadMethod特性的方法是Awake方法之后执行的(如果是MonoBehaviour派生类)。如果一个类中有多个静态方法使用了RuntimeInitializeOnLoadMethod特性,执行顺序是不固定的。
[RuntimeInitializeOnLoadMethod]
static void OnAutoRun()
{
Debug.Log("OnAutoRun");
}
在同一个GameObject上面,最多只能添加一个该Class的实例。尝试添加多个的时候,会出现提示。
[DisallowMultipleComponent]
public class TestClass : MonoBehaviour {}
脚本不挂载到游戏对象执行
通常情况下,新建的脚本要挂载到游戏对象上才能运行,如果在脚本中的方法前使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)],可以不用挂载到任何游戏对象上即可在程序运行时执行此方法,方便在在程序初始化前做一些额外的初始化工作。如下代码所示:
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
public static void DoSomething()
{
Debug.Log("It's the start of the game");
}