Самый упоротый баг со сбросом значений

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

Самый упоротый баг со сбросом значений

Сообщение 1max1 01 ноя 2020, 23:23

Даже не знаю как назвать тему, настолько все странно. На видео видно что значения дублируются как только идет выделение нескольких объектов, причем если делать через EditorGUILayout.PropertyField то все ок. С одним объектом работает нормально, но стоит только выделить несколько, как тут же одна переменная дублируется в остальные компоненты.



this.Initialize(); это расширение для удобства инициализации по имени, оно тут не причем, если что)

Синтаксис:
Используется csharp
        public static void Initialize(this Editor editor)
        {
            foreach (var field in editor.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
            {
                if (field.FieldType == typeof(SerializedProperty))
                {
                    var property = editor.serializedObject.FindProperty(field.Name);

                    if (property != null)
                    {
                        field.SetValue(editor, property);
                    }
                }
            }
        }
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Самый упоротый баг со сбросом значений

Сообщение 1max1 02 ноя 2020, 03:15

В общем, с мульти объектами и прямым присвоением не так просто, нужно еще костыль сверху накидывать в виде EditorGUI.BeginChangeCheck, чтобы не трогало ничего без изменения. Мда... пожалуй самое странное что есть в юнити это скрипты для редактора, уж больно сырая штука я думаю. Может кто еще подскажет как в int поле нарисовать символ тире, чтобы отображать его когда у скриптов значения разные?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Самый упоротый баг со сбросом значений

Сообщение samana 02 ноя 2020, 08:00

1max1 писал(а):Мда... пожалуй самое странное что есть в юнити это скрипты для редактора, уж больно сырая штука я думаю.

Насколько я помню, то весь интерфейс программы написан как раз именно этими же скриптами редактора. То-есть скрипты редактора это не отдельная фишка от разработчиков Unity для пользователя, а сами разработчики используют эти же самые скрипты для всего, что касается интерфейса и интерактива в редакторе.
Просто там видимо много нюансов, которые мало кому известны, вот и причина "сырости" для обычного пользователя.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Самый упоротый баг со сбросом значений

Сообщение 1max1 04 ноя 2020, 12:55

Просто там видимо много нюансов, которые мало кому известны, вот и причина "сырости" для обычного пользователя.

Да-да, именно поэтому свойство https://docs.unity3d.com/ScriptReferenc ... -type.html хранит в себе не сам тип, а имя типа, без имени сборки, без вложенности классов, тупо имя и все. И не дай бог имена каких-то классов совпадут в разных неймспейсах, ошибки не избежать. Благо в 2020 это фиксанули (и то, кое-как), но всякие тлс до сих пор в пролете. Я уже молчу про логику отрисовки элементов с убогим обращение к их позиционированию. Ты просто еще не делал ничего сложного по этой теме, особенно с рефлексией, там лес дремучей некуда + скуднейшая документация, ну короче... :-B
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Editor

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

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