Редактор Unity - Как остановить синее поле при редактировании - PullRequest
0 голосов
/ 22 марта 2019

Я создаю инструмент в Unity для создания вашего проекта для нескольких платформ, когда вы нажимаете кнопку.

Я начал с окна настроек инструмента и придумал что-то раздражающее.Всякий раз, когда я изменяю значение enum поля EnumPopup, поле становится синим в окне редактора.Есть ли способ отключить это?

This is the code I am using to show the enum field on the window

This is the window when the enum field has not been changed

This is the window when the enum field has been changed

Видите, как на 2-м изображении поле не синее, а на 3-м изображении поле изменилось на синий?Как я могу предотвратить это?

Заранее спасибо!

1 Ответ

0 голосов
/ 22 марта 2019

Трудно помочь без остатка вашего кода.

Это встроенное поведение Unity. Я перепробовал много вещей см. Здесь , чтобы отключить / перезаписать встроенную раскраску префиксных меток, но пока не повезло.


Обходной путь, однако, может заключаться в том, чтобы вместо этого использовать независимый EditorGUI.LabelField, который не будет затронут EnumPopup вместе с EditorGUIUtility.labelWidth:

var LabelRect = new Rect(
    FILEMANAGEMENT_ENUMFIELD_RECT.x, 
    FILEMANAGEMENT_ENUMFIELD_RECT.y,
    // use the current label width
    EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.height
);

var EnumRect = new Rect(
    FILEMANAGEMENT_ENUMFIELD_RECT.x + EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.y, 
    FILEMANAGEMENT_ENUMFIELD_RECT.width - EditorGUIUtility.labelWidth, 
    FILEMANAGEMENT_ENUMFIELD_RECT.height
);

EditorGUI.LabelField(LabelRect, "File relative to");
QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUI.EnumPopup(EnumRect, QuickBuilder.Settings.Relation);

Как видите, этикетка не становится синей, а ширина остается гибкой

enter image description here


Sidenotes
Вместо установки значений с помощью сценариев редактирования, например, QuickBuilder.Settings.Relation = вы всегда должны пытаться использовать SerializedProperty . Он обрабатывает такие вещи, как Undo / Redo, а также помечает соответствующие объекты и сцены как dirty.

Есть ли особая причина, по которой вы используете EditorGUI вместо EditorGUILayout? В последнем случае вам не нужно настраивать Rect s.

EditorGUILayout.BeginHorizontal();
{
    EditorGUILayout.LabelField("File relative to", GUILayout.Width(EditorGUIUtility.labelWidth));
    QuickBuilder.Settings.Relation = (QuickBuilder.Settings.PathRelation)EditorGUILayout.EnumPopup(QuickBuilder.Settings.Relation);
}
EditorGUILayout.EndHorizontal();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...