TODO Unity中的各种Attribute


修饰类


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;
image.png

Range

设置int, float的数值范围,以滑块的方式显示。

[Range(0,1)]
public float alpha;

Tooltip

[Tooltip("Health value between 0 and 100.")]
public int health = 0;
image.png

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");
}
image.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:http://gad.qq.com/program/translateview/7167991 英文版原...
    重装机霸阅读 9,357评论 1 84
  • AddComponentMenu AddComponentMenu属性允许您将脚本放置在“组件”菜单中的任何位置,...
    su9257_海澜阅读 10,794评论 0 15
  • 原文地址 http://www.fx114.net/qa-75-172454.aspx 使用Profiler工具...
    IongX阅读 11,219评论 1 11
  • 一如既往出门,今儿是难得的好天气,无风无云天高气爽,嗅在鼻子里的味道都是清清冽冽,阳光洒过来有点晃得睁不开眼。远处...
    candywater阅读 3,599评论 0 0
  • 四川东北部,大雪厚厚的积累着,一脚踩下去便能没过脚踝。如盐般铺洒的雪,粉一样粘在我的小腿皮肤上,我痛的直颤抖,很...
    张夏日阅读 3,899评论 3 13