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;
}
TODO Unity中的各种Attribute_第1张图片

AddComponentMenu

修饰MonoBehaviour,添加菜单项到AddComponent菜单,可以将一些自定义的组件添加进来,方便策划人员添加组件。

[AddComponentMenu("Motion/StraightMove")]
public class StraightMove : MonoBehaviour {

    public float speed;

    void Start () {

    }   
    void Update () {

    }
}
TODO Unity中的各种Attribute_第2张图片

DisallowMultipleComponent

修饰MonoBehaviour,当前gameObject上只能添加一个此脚本。

[DisallowMultipleComponent]
public class Test : MonoBehaviour
{
}

手动添加时,会弹出以下窗口

TODO Unity中的各种Attribute_第3张图片

实际测试,在代码中再次添加这个脚本,也不会成功,会在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;
TODO Unity中的各种Attribute_第4张图片

TextArea

带滚动条的文本编辑框

[TextArea]
public string Description;
TODO Unity中的各种Attribute_第5张图片
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;
}
TODO Unity中的各种Attribute_第6张图片

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;
TODO Unity中的各种Attribute_第7张图片

Space

字段间分隔几行

public string Name;
[Space(50)]
public int Age;
TODO Unity中的各种Attribute_第8张图片

HideInInspector

在Inspector中隐藏某个字段,避免公共的字段被修改

[[HideInInspector]
public int p = 5;

修饰方法


ContextMenu

修饰MonoBehaviour的非静态方法,在Inspector面板中脚本上右键,弹出的菜单中,添加菜单项,用来触发这个方法。

[ContextMenu ("Do Something")]
void DoSomething()
{
    Debug.Log ("Do");
}
TODO Unity中的各种Attribute_第9张图片
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

你可能感兴趣的:(TODO Unity中的各种Attribute)