Страницы

суббота, 8 февраля 2020 г.

Использование DecoratorDrawer в инспекторе свойств объектов Unity – заголовки и разделители

Когда вы пишете собственный скрипт, то, скорее всего, хотите изменять значения его открытых полей из Инспектора. По умолчанию поля инспектора располагаются рядом друг с другом, а имя поля - единственная информация, которую вы получаете. Вы можете написать собственный редактор, но это требует создания другого скрипта с большим количеством кода, и это требует времени. Есть более простой способ изменять вид Инспектора. Для этого нужно использовать DecoratorDrawers.
DecoratorDrawers - это атрибуты, которые можно установить в любом общедоступном поле в вашем скрипте, чтобы изменить способ его отображения в представлении «Инспектор» (фактически, он отображает некоторые дополнения до отображения поля). Есть два встроенных DecoratorDrawers:
SpaceAttribute
HeaderAttribute

SpaceAttribute

SpaceAttribute  можно использовать, чтобы добавить некоторые интервалы в окне инспектора. Таким образом вы можете разделить две или более группы свойств, чтобы они были более читабельными.

Давайте посмотрим на этот пример:

using UnityEngine;
public class SpaceDecoratorDrawerExample : MonoBehaviour
{
     public int health = 0;
     public int maxHealth = 100;
     public int shield = 0;
     public int maxShield = 0;
}
Этот скрипт проявляется следующим образом в представлении Инспектора:


Чтобы улучшить читаемость, мы можем разделить эти свойства на две группы: здоровье и группа защиты. Чтобы сделать это, просто добавьте [Space (10)] перед  полем shield.

using UnityEngine;
public class SpaceDecoratorDrawerExample : MonoBehaviour
{
    public int health = 0;
    public int maxHealth = 100;
    [Space(10)]
    public int shield = 0;
    public int maxShield = 0;
}
Число 10 здесь означает, что мы хотим, чтобы пространство было 10 пикселей в высоту. Вот что получается:


Обратите внимание, что добавление [Space (10)] не означает «поместить пробел между полями maxHealth и shield», а вместо этого «нарисовать пробел перед свойством shield». Обычно это не имеет значения, но хорошо знать, если у вас возникнут какие-либо проблемы.

HeaderAttribute

Атрибут заголовка добавляет метку заголовка перед полем, которому назначен этот атрибут. Вот пример кода:
using UnityEngine;
public class HeaderDecoratorDrawerExample : MonoBehaviour
{
    [Header("Health Settings - Здоровье")]
    public int health = 0;
    public int maxHealth = 100;
    [Header("Shield Settings - Защита")]
    public int shield = 0;
    public int maxShield = 0;
}
А вот как это выглядит:


Как вы можете видеть, он похож на  SpaceAttribute,  но есть также видимая метка заголовка. И это было сделано с одним атрибутом без написания специального сценария редактора!

Использование пробела и заголовка одновременно

Вы можете использовать оба свойства одновременно. Все, что вам нужно знать, это то, что они будут отображаться в обратном порядке. Так что если вы напишете:

[Header("Shield Settings")]
[Space(10)]
public int shield = 0;

cначала будет отображено пространство, затем заголовок. Не беспокойтесь, если забудете об этом. Вы заметите свою ошибку, как только посмотрите на Инспектора.

Написание DecoratorDrawers

Вы, наверное, думаете, могли бы вы написать свои собственные DecoratorDrawers. Да, это возможно. Мы рассмотрим эту тему в другой статье. Спасибо за чтение!
Статья https://blog.theknightsofunity.com/use-decorator-drawers-improve-inspector-view-scripts/