Я хочу создать инструмент, аналогичный инструменту Unity's Terrain, в инспекторе которого есть несколько удобных кнопок переключения:
Как я могу добиться подобного дизайна для этого? Я знаю, как создавать обычные кнопки и другие компоненты пользовательского интерфейса в инспекторе, но не могу найти достаточно информации, чтобы кнопки переключались.
До сих пор я использовал обычные переключатели, которые производят флажок:
var tmp = EditorGUILayout.Toggle( SetAmountFieldContent, _setValue );
if ( tmp != _setValue )
{
_setValue = tmp;
if ( _setValue )
_smoothValue = false;
}
tmp = EditorGUILayout.Toggle( SmoothValueFieldContent, _smoothValue );
if ( tmp != _smoothValue )
{
_smoothValue = tmp;
if ( _smoothValue )
_setValue = false;
}
Установка переключателя GUIStyle
в положение «Кнопка» не дает желаемого результата. Текст или изображение идет слева от кнопки, а не внутри.
var tmp = EditorGUILayout.Toggle( SetAmountFieldContent, _setValue, "Button" );
Также ни один из найденных вариантов в GUISkin , похоже, не помогает.
_smoothValue = !GUILayout.Button( SetAmountFieldContent, _smoothValue ? ToggleButtonStyleToggled : ToggleButtonStyleNormal)
вместо двух логических значений? Это хорошо работает для меня, и код выглядит близко к использованию кнопки / переключателей стандартного единстваToggle возвращает текущее состояние кнопки - либо то же состояние, переданное в значении, либо новое значение, измененное пользователем. Так что лучшая модель была бы ...
Вы можете использовать тот же шаблон обмена в зависимости от состояния для GUIStyles.
источник
Вот простой, но простой способ сделать это:
взяты отсюда
источник
Используйте GUILayout.Toolbar . Документы вводят в заблуждение, на самом деле кнопки запускаются вместе:
Кроме того, вы можете использовать стили "buttonleft", "buttonmid", "buttonright", чтобы нарисовать стиль этих кнопок напрямую.
источник
Ты можешь сделать это:
Очень важно, чтобы вы инстанцировали
buttonStyle
внутри,OnInspectorGUI()
иначе вы получите ошибку. Кроме того, не делайте этого,buttonStyle = GUI.skin.button;
потому что вы будете копироватьskin.button
ссылку, и любое изменениеbuttonStyle
приведет к изменению всех стилей кнопок.источник