Визуально отделить переменные в Inspector

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Визуально отделить переменные в Inspector

Сообщение kirly 28 ноя 2012, 10:45

Добрый день!

Имеется множество (штук 50) public переменных в скрипте, кинутом на объект. Честно говоря, глаза ломаются, когда нужно найти очередную переменную (названия похожи) при просмотре через Incpector. А можно ли как-то визуально отделить эти переменные в Инспекторе?

Например:

a-переменная
b-переменная
с-переменная
------------------------ (тут линия визуального отделения, сепаратор или нечто подобное)
d-переменная
e-переменная
f-переменная

Даже не знаю, с какой стороны подступиться к этому вопросу.
Заранее спасибо за советы.
kirly
UNIт
 
Сообщения: 72
Зарегистрирован: 10 июн 2011, 08:36

Re: Визуально отделить переменные в Inspector

Сообщение kirly 29 ноя 2012, 07:37

Видимо разобрался.

Тут, собственно, пути два. Один красивый (правильный), а другой - простой, корявый, но тоже отвечающий условиям задачи (если нужно только визуально отделить блоки переменных).

Способ первый - это создание своего дизайна инспектора для скрипта. Делается это через составление скрипта-обработчика примерно вот так: http://docs.unity3d.com/Documentation/S ... orGUI.html . Как я понял, дизайн мы создаем с нуля. Обозначаем объект (скрипт), извлекаем из него нужные параметры (SerializedProperty) и размещаем эти параметры так, как нам хочется, используя слайдеры, разделители, прогрессбары и т.п. Этот способ правильный, красивый и к нему я обязательно вернусь, т.к. он позволяет (насколько я понял), на лету вычислять промежуточные значения для переменных (если таковые конечно у вас есть).

Способ второй. Корявый. Так делать не надо, однако если разделитель между переменными нужен на пару часов - подойдет. Банально создаем public bool TTTTTTTTTTTTTTTTTTTTTTTTTTTTT0; в тех местах, в которых вам бы хотелось видеть разделитель. Потом, естественно, это убожество убираем, либо создаем всё по способу №1.

Единственное, у меня не получилось понять, как property преобразовать в string или integer (чтобы получать те самые "промежуточные значения"). Но, думаю, нужно просто покопать чуть дольше. Если подскажете - буду благодарен.
kirly
UNIт
 
Сообщения: 72
Зарегистрирован: 10 июн 2011, 08:36

Re: Визуально отделить переменные в Inspector

Сообщение Nicloay 29 ноя 2012, 07:46

почитай вот это http://docs.unity3d.com/Documentation/S ... ditor.html
как правильно забирать проперти и их отображать. в самом первом примере, обрати внимание на
Синтаксис:
Используется csharp
damageProp = serializedObject.FindProperty ("damage");

и
Синтаксис:
Используется csharp
 EditorGUILayout.PropertyField (gunProp, new GUIContent ("Gun Object"));
        // Apply changes to the serializedProperty - always do this in the end of OnInspectorGUI.
        serializedObject.ApplyModifiedProperties ();
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Визуально отделить переменные в Inspector

Сообщение kirly 29 ноя 2012, 10:44

Спасибо.
Работа-то! Работа как ускорилась со своим Инспектором! Свои инструменты в [unity 3D] это просто шик!
kirly
UNIт
 
Сообщения: 72
Зарегистрирован: 10 июн 2011, 08:36

Re: Визуально отделить переменные в Inspector

Сообщение Nicloay 29 ноя 2012, 11:04

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

Синтаксис:
Используется csharp

[Serializable]
public class MovementProperties //Not a MonoBehaviour!
{
   public float movementSpeed;
   public float turnSpeed = 1; //default provided
}
 
public class HealthProperties //Not a MonoBehaviour!
{
   public float maxHealth;
   public float regenerationRate;
}
 
public class Player : MonoBehaviour
{
   public MovementProperties movementProeprties;
   public HealthPorperties healthProeprties;
}
 


Скрытый текст:
Group data in serializable classes to make things neater in the inspector. Some entities may have dozens of tweakables. It can become a nightmare to find the right variable in the inspector. To make things easier, follow these steps:

Define separate classes for groups of variables. Make them public and serializable.
In the primary class, define public variables of each type defined as above.
Do not initialize these variables in Awake or Start; since they are serializable, Unity will take care of that.
You can specify defaults as before by assigning values in the definition;
This will group variables in collapsible units in the inspector, which is easier to manage.
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Визуально отделить переменные в Inspector

Сообщение Alecksandr 02 янв 2017, 02:35

Nicloay писал(а):короче вот тебе супер вариант

Синтаксис:
Используется csharp

[Serializable]
public class MovementProperties //Not a MonoBehaviour!
{
   public float movementSpeed;
   public float turnSpeed = 1; //default provided
}
 
public class HealthProperties //Not a MonoBehaviour!
{
   public float maxHealth;
   public float regenerationRate;
}
 
public class Player : MonoBehaviour
{
   public MovementProperties movementProeprties;
   public HealthPorperties healthProeprties;
}
 


Скрытый текст:
Group data in serializable classes to make things neater in the inspector. Some entities may have dozens of tweakables. It can become a nightmare to find the right variable in the inspector. To make things easier, follow these steps:

Define separate classes for groups of variables. Make them public and serializable.
In the primary class, define public variables of each type defined as above.
Do not initialize these variables in Awake or Start; since they are serializable, Unity will take care of that.
You can specify defaults as before by assigning values in the definition;
This will group variables in collapsible units in the inspector, which is easier to manage.

Спасибо, очень помог!
Alecksandr
UNец
 
Сообщения: 2
Зарегистрирован: 27 авг 2014, 13:07

Re: Визуально отделить переменные в Inspector

Сообщение DbIMok 02 янв 2017, 03:22

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Визуально отделить переменные в Inspector

Сообщение Rpabuj1 17 фев 2017, 20:49

Добрый вечер!
Если еще актуально :)
Синтаксис:
Используется csharp
[Header("Тут пишем что-то")]
Rpabuj1
Старожил
 
Сообщения: 639
Зарегистрирован: 04 авг 2015, 12:07

Re: Визуально отделить переменные в Inspector

Сообщение ierecumi 04 апр 2019, 12:14

Синтаксис:
Используется csharp
//ПЕРВЫЙ ВАРИАНТ [ОТСТУПЫ]
public string myText;
[Space] //задаёт отступ +5 пикселей к стандартному отступу.
public string textMy;
[Space(20)]//задаёт отступ в пикселях
public int count;

//ВТОРОЙ ВАРИАНТ [ЗАГОЛОВКИ]
public string myText;
[HEADER("===============")] //вместо названия чертишь линии
public string textMy;
[HEADER("-----------------------")] //вместо названия чертишь линии
public int count;
[HEADER("________________")] //вместо названия чертишь линии

//ТРЕТИЙ ВАРИАНТ [СОВМЕЩАЕШЬ]
public string myText;
[Space,HEADER("==============="),Space]
public string textMy;
[Space,HEADER("==============="),Space]
public int count;

 
ierecumi
UNец
 
Сообщения: 1
Зарегистрирован: 04 апр 2019, 12:05


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3