Unity3d 特性 Unity3d Attributes 特性 Unity3d 属性

特性

让类在编辑模式执行
[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");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值