VariusRain
@VariusRain
музыкант-программист-конструктор

Почему serializedObject.FindProperty возвращает null?

Есть скрипт, унаследованный от MonoBehaviour и повешенный на объект, вот его содержимое:
public class NPCActionsQueue : MonoBehaviour
    {
        public int RandomFactor { get; set; }
        public int TimeInterval { get; set; }
        public List<BehaviorPoint> BehaviorPoints { get; set; }
    }


Так как он содержит список сложных самописных классов, которые Unity, что логично, отображать в инспекторе не умеет, решил написать свой кастомный.

[CustomEditor(typeof(NPCActionsQueue))]
public class ActionsQueueEditor : Editor
{
...


Но вот тут столкнулся с проблемой:
Если использовать в качестве объекта для работы с данными внутри ActionsQueueEditor
this.target
То всё прекрасно, отображается, добавляется, меняется, но... не сохраняется. После перезапуска редактора, перехода на разные сцен или даже изменения какого-то из задействованных скриптов, все внесённые через инспектор данные удаляются.

Решил использовать serializedObject и его методы
serializedObject.Update();
... тут рисуется редактор
serializedObject.ApplyModifiedProperties();

Но проблема в том, что в момент инициализации скрипта я пытаюсь получить свойства, но они всё время равны null'ю
Хотя, если посмотреть через отладку, скрипт нужный подтянулся и данные в нём видно
6341ace7dcf46809050556.png
Однако же, в переменной после FindProperty null

Уверен, что просто упускаю какую-то мелочь

Версия Unity 2021.3.11f1
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
VariusRain
@VariusRain Автор вопроса
музыкант-программист-конструктор
Решение:
В целевом для редактирования классе убрать автосвойства и заменить обычными публичными переменными.
А в классе редактора

EditorGUI.BeginChangeCheck();
...рисуем редактор
if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(targetObject);
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы