unity3d
Атрибуты
Поиск…
Синтаксис
- [AddComponentMenu (string menuName)]
- [AddComponentMenu (string menuName, int order)]
- [CanEditMultipleObjects]
- [ContextMenuItem (имя строки, строковая функция)]
- [ContextMenu (имя строки)]
- [CustomEditor (Тип inspectedType)]
- [CustomEditor (Тип inspectedType, bool editorForChildClasses)]
- [CustomPropertyDrawer (Тип типа)]
- [CustomPropertyDrawer (Тип типа, bool useForChildren)]
- [DisallowMultipleComponent]
- [DrawGizmo (GizmoType gizmo)]
- [DrawGizmo (GizmoType gizmo, Тип drawGizmoType)]
- [ExecuteInEditMode]
- [Заголовок (заголовок строки)]
- [HideInInspector]
- [InitializeOnLoad]
- [InitializeOnLoadMethod]
- [MenuItem (string itemName)]
- [MenuItem (string itemName, bool isValidateFunction)]
- [MenuItem (string itemName, bool isValidateFunction, int priority)]
- [Многострочные (int lines)]
- [PreferenceItem (имя строки)]
- [Диапазон (поплавок мин., Макс. Поплавок)]
- [RequireComponent (Тип типа)]
- [RuntimeInitializeOnLoadMethod]
- [RuntimeInitializeOnLoadMethod (RuntimeInitializeLoadType loadType)]
- [SerializeField]
- [Пробел (высота поплавка)]
- [TextArea (int minLines, int maxLines)]
- [Всплывающая подсказка (строка подсказки)]
замечания
SerializeField
Система сериализации Unity может использоваться для выполнения следующих действий:
- Может сериализовать общепринятые нестатические поля (сериализуемых типов)
- Может сериализовать непубличные нестатические поля, отмеченные атрибутом [SerializeField]
- Невозможно сериализовать статические поля
- Невозможно сериализовать статические свойства
Ваше поле, даже если оно отмечено с помощью атрибута SerializeField, будет отнесено только в том случае, если оно относится к типу, который Unity может сериализовать, а именно:
- Все классы, наследующие от UnityEngine.Object (например, GameObject, Component, MonoBehaviour, Texture2D)
- Все основные типы данных, такие как int, string, float, bool
- Некоторые встроенные типы, такие как Vector2 / 3/4, Quaternion, Matrix4x4, Color, Rect, LayerMask
- Массивы сериализуемого типа
- Список сериализуемого типа
- Перечисления
- Структуры
Общие атрибуты инспектора
[Header( "My variables" )]
public string MyString;
[HideInInspector]
public string MyHiddenString;
[Multiline( 5 )]
public string MyMultilineString;
[TextArea( 2, 8 )]
public string MyTextArea;
[Space( 15 )]
public int MyInt;
[Range( 2.5f, 12.5f )]
public float MyFloat;
[Tooltip( "This is a tip for MyDouble" )]
public double MyDouble;
[SerializeField]
private double myHiddenDouble;
При наведении указателя на поле:
[Header( "My variables" )]
public string MyString;
Заголовок помещает жирный ярлык, содержащий текст над приписанным полем. Это часто используется для маркировки групп, чтобы сделать их отличными от других меток.
[HideInInspector]
public string MyHiddenString;
HideInInspector не позволяет публичным полям отображаться в инспекторе. Это полезно для доступа к полям из других частей кода, где они иначе не видны или не изменяются.
[Multiline( 5 )]
public string MyMultilineString;
Многострочный создает текстовое поле с указанным количеством строк. Превышение этой суммы не приведет ни к расширению окна, ни к переносу текста.
[TextArea( 2, 8 )]
public string MyTextArea;
TextArea позволяет использовать текст в многострочном стиле с автоматическим оберткой и полосами прокрутки, если текст превышает выделенную область.
[Space( 15 )]
public int MyInt;
Космос заставляет инспектора добавлять дополнительное пространство между предыдущими и текущими объектами - полезными для разграничения и разделения групп.
[Range( 2.5f, 12.5f )]
public float MyFloat;
Диапазон задает числовое значение между минимумом и максимумом. Этот атрибут также работает с целыми числами и удвоениями, хотя min и max указаны как float.
[Tooltip( "This is a tip for MyDouble" )]
public double MyDouble;
Подсказка показывает дополнительное описание всякий раз, когда надпись поля зависнет.
[SerializeField]
private double myHiddenDouble;
SerializeField заставляет Unity сериализовать поле - полезно для частных полей.
Атрибуты компонентов
[DisallowMultipleComponent]
[RequireComponent( typeof( Rigidbody ) )]
public class AttributesExample : MonoBehaviour
{
[...]
}
[DisallowMultipleComponent]
Атрибут DisallowMultipleComponent запрещает пользователям добавлять несколько экземпляров этого компонента в один GameObject.
[RequireComponent( typeof( Rigidbody ) )]
Атрибут RequireComponent позволяет указать другой компонент (или более) как требования для того, когда этот компонент добавлен в GameObject. Когда вы добавляете этот компонент в GameObject, необходимые компоненты будут автоматически добавлены (если они еще не присутствуют), и эти компоненты не могут быть удалены до тех пор, пока тот, который их требует, будет удален.
Атрибуты времени выполнения
[ExecuteInEditMode]
public class AttributesExample : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod]
private static void FooBar()
{
[...]
}
[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )]
private static void Foo()
{
[...]
}
[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterSceneLoad )]
private static void Bar()
{
[...]
}
void Update()
{
if ( Application.isEditor )
{
[...]
}
else
{
[...]
}
}
}
[ExecuteInEditMode]
public class AttributesExample : MonoBehaviour
Атрибут ExecuteInEditMode заставляет Unity выполнять магические методы этого скрипта, даже если игра не воспроизводится.
Функции не вызываются постоянно, как в режиме воспроизведения
- Обновление вызывается только тогда, когда что-то в сцене изменилось.
- OnGUI вызывается, когда Game View получает событие.
- OnRenderObject и другие функции обратного вызова рендеринга вызываются при каждой перерисовке вида сцены или представления игры.
[RuntimeInitializeOnLoadMethod]
private static void FooBar()
[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )]
private static void Foo()
[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterSceneLoad )]
private static void Bar()
Атрибут RuntimeInitializeOnLoadMethod позволяет вызывать метод класса времени выполнения, когда игра загружает среду выполнения без какого-либо взаимодействия с пользователем.
Вы можете указать, хотите ли вы, чтобы метод вызывался до или после загрузки сцены (по умолчанию - по умолчанию). Порядок выполнения не гарантируется для методов, использующих этот атрибут.
Атрибуты меню
[AddComponentMenu( "Examples/Attribute Example" )]
public class AttributesExample : MonoBehaviour
{
[ContextMenuItem( "My Field Action", "MyFieldContextAction" )]
public string MyString;
private void MyFieldContextAction()
{
[...]
}
[ContextMenu( "My Action" )]
private void MyContextMenuAction()
{
[...]
}
}
Результат атрибута [AddComponentMenu]
Результат атрибута [ContextMenuItem]
Результат атрибута [ContextMenu]
[AddComponentMenu( "Examples/Attribute Example" )]
public class AttributesExample : MonoBehaviour
Атрибут AddComponentMenu позволяет разместить компонент в любом месте в меню «Компонент», а не в меню «Компонент-> Сценарии».
[ContextMenuItem( "My Field Action", "MyFieldContextAction" )]
public string MyString;
private void MyFieldContextAction()
{
[...]
}
Атрибут ContextMenuItem позволяет вам определять функции, которые можно добавить в контекстное меню поля. Эти функции будут выполняться после выбора.
[ContextMenu( "My Action" )]
private void MyContextMenuAction()
{
[...]
}
Атрибут ContextMenu позволяет вам определять функции, которые можно добавить в контекстное меню компонента.
Атрибуты редактора
[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
static AttributesExample()
{
[...]
}
[InitializeOnLoadMethod]
private static void Foo()
{
[...]
}
}
[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
static AttributesExample()
{
[...]
}
Атрибут InitializeOnLoad позволяет пользователю инициализировать класс без какого-либо взаимодействия с пользователем. Это происходит всякий раз, когда редактор запускается или перекомпилируется. Статический конструктор гарантирует, что это будет вызываться перед любыми другими статическими функциями.
[InitializeOnLoadMethod]
private static void Foo()
{
[...]
}
Атрибут InitializeOnLoad позволяет пользователю инициализировать класс без какого-либо взаимодействия с пользователем. Это происходит всякий раз, когда редактор запускается или перекомпилируется. Порядок выполнения не гарантируется для методов, использующих этот атрибут.
[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour
{
public int MyInt;
private static string prefsText = "";
[PreferenceItem( "My Prefs" )]
public static void PreferencesGUI()
{
prefsText = EditorGUILayout.TextField( "Prefs Text", prefsText );
}
[MenuItem( "Attributes/Foo" )]
private static void Foo()
{
[...]
}
[MenuItem( "Attributes/Foo", true )]
private static bool FooValidate()
{
return false;
}
}
Результат атрибута [PreferenceItem]
Результат атрибута [MenuItem]
[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour
Атрибут CanEditMultipleObjects позволяет редактировать значения из вашего компонента через несколько GameObjects. Без этого компонента вы не увидите, что ваш компонент выглядит как обычно при выборе нескольких GameObjects, но вместо этого вы увидите сообщение «Редактирование нескольких объектов не поддерживается»,
Этот атрибут предназначен для пользовательских редакторов для поддержки многократного редактирования. Нестандартные редакторы автоматически поддерживают многократное редактирование.
[PreferenceItem( "My Prefs" )]
public static void PreferencesGUI()
Атрибут PreferenceItem позволяет создать дополнительный элемент в меню настроек Unity. Метод приема должен быть статичным для использования.
[MenuItem( "Attributes/Foo" )]
private static void Foo()
{
[...]
}
[MenuItem( "Attributes/Foo", true )]
private static bool FooValidate()
{
return false;
}
Атрибут MenuItem позволяет создавать пользовательские элементы меню для выполнения функций. В этом примере также используется функция валидатора (которая всегда возвращает false), чтобы предотвратить выполнение функции.
[CustomEditor( typeof( MyComponent ) )]
public class AttributesExample : Editor
{
[...]
}
Атрибут CustomEditor позволяет создавать собственные редакторы для ваших компонентов. Эти редакторы будут использоваться для рисования вашего компонента в инспекторе и должны вытекать из класса Editor.
[CustomPropertyDrawer( typeof( MyClass ) )]
public class AttributesExample : PropertyDrawer
{
[...]
}
Атрибут CustomPropertyDrawer позволяет создать пользовательский ящик свойств для инспектора. Вы можете использовать эти ящики для своих пользовательских типов данных, чтобы их можно было увидеть в инспекторе.
[DrawGizmo( GizmoType.Selected )]
private static void DoGizmo( AttributesExample obj, GizmoType type )
{
[...]
}
Атрибут DrawGizmo позволяет создавать пользовательские вещицы для ваших компонентов. Эти вещицы будут нарисованы в режиме просмотра сцены. Вы можете решить, когда рисовать gizmo, используя параметр GizmoType в атрибуте DrawGizmo.
Метод приема требует двух параметров: первый - это компонент для рисования объекта gizmo, а второй - состояние, в котором объект, которому нужен рисованный гизмо, находится.