Страница 1 из 1

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

СообщениеДобавлено: 28 ноя 2012, 10:45
kirly
Добрый день!

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

Например:

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

Даже не знаю, с какой стороны подступиться к этому вопросу.
Заранее спасибо за советы.

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

СообщениеДобавлено: 29 ноя 2012, 07:37
kirly
Видимо разобрался.

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

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

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

Единственное, у меня не получилось понять, как property преобразовать в string или integer (чтобы получать те самые "промежуточные значения"). Но, думаю, нужно просто покопать чуть дольше. Если подскажете - буду благодарен.

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

СообщениеДобавлено: 29 ноя 2012, 07:46
Nicloay
почитай вот это 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 ();

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

СообщениеДобавлено: 29 ноя 2012, 10:44
kirly
Спасибо.
Работа-то! Работа как ускорилась со своим Инспектором! Свои инструменты в [unity 3D] это просто шик!

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

СообщениеДобавлено: 29 ноя 2012, 11:04
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.

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

СообщениеДобавлено: 02 янв 2017, 02:35
Alecksandr
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.

Спасибо, очень помог!

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

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

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

СообщениеДобавлено: 17 фев 2017, 20:49
Rpabuj1
Добрый вечер!
Если еще актуально :)
Синтаксис:
Используется csharp
[Header("Тут пишем что-то")]

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

СообщениеДобавлено: 04 апр 2019, 12:14
ierecumi
Синтаксис:
Используется 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;