unity3d Attributes


  • [AddComponentMenu(string menuName)]
  • [AddComponentMenu(string menuName, int order)]
  • [CanEditMultipleObjects]
  • [ContextMenuItem(string name, string function)]
  • [ContextMenu(string name)]
  • [CustomEditor(Type inspectedType)]
  • [CustomEditor(Type inspectedType, bool editorForChildClasses)]
  • [CustomPropertyDrawer(Type type)]
  • [CustomPropertyDrawer(Type type, bool useForChildren)]
  • [DisallowMultipleComponent]
  • [DrawGizmo(GizmoType gizmo)]
  • [DrawGizmo(GizmoType gizmo, Type drawnGizmoType)]
  • [ExecuteInEditMode]
  • [Header(string header)]
  • [HideInInspector]
  • [InitializeOnLoad]
  • [InitializeOnLoadMethod]
  • [MenuItem(string itemName)]
  • [MenuItem(string itemName, bool isValidateFunction)]
  • [MenuItem(string itemName, bool isValidateFunction, int priority)]
  • [Multiline(int lines)]
  • [PreferenceItem(string name)]
  • [Range(float min, float max)]
  • [RequireComponent(Type type)]
  • [RuntimeInitializeOnLoadMethod]
  • [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType loadType)]
  • [SerializeField]
  • [Space(float height)]
  • [TextArea(int minLines, int maxLines)]
  • [Tooltip(string tooltip)]



Unity's serialization system can be used to do the following:

  • Can serialize public nonstatic fields (of serializable types)
  • Can serialize nonpublic nonstatic fields marked with the [SerializeField] attribute
  • Cannot serialize static fields
  • Cannot serialize static properties

Your field, even if marked with the SerializeField attribute, will only be attributed if it is of a type that Unity can serialize, which are:

  • All classes inheriting from UnityEngine.Object (e.g. GameObject, Component, MonoBehaviour, Texture2D)
  • All basic data types like int, string, float, bool
  • Some built-in types like Vector2/3/4, Quaternion, Matrix4x4, Color, Rect, LayerMask
  • Arrays of a serializable type
  • List of a serializable type
  • Enums
  • Structs