Отображение SerializedProperty нужного типа в Inspector
Добавлено: 02 сен 2016, 23:00
Если кратко - то нужно для object(System.Object) переменной (для которой точно известен тип, он точно сериализуем в юнити, например Rect, Vector3, int + свои Serializable классы) создать SerializedProperty(главное - вызвать PropertyDrawer.OnGUI для этого типа), отрисовать в GUI(это-то я знаю как) и применить значение обратно в object.
Как я понял, в лоб это не возможно, тк SerializedProperty закреплён за SerializedObject, да и восстановить без парса исходную переменную из SerializedProperty невозможно. Буду рад, если ошибаюсь. Суть в том ,что пишу систему Event`ов, подобных UnityEvent, но с произвольным кол-вом аргументов в методе. Система завязана на рефлексии. И параметры вызываемого метода сложены в два листа - Object(для юнитевских ссылочных типов) и object(для всех остальных Serializable типах). на самом деле у меня структура сложнее, тк созданы обёртки для того, чтобы юнити хранила мета-данные(написаны сериализуемые обёртки для Type, MethodInfo, object(только для Serializable)) и индексы положения аргумента.
И с выводом произвольного кол-ва UnityEngine.Object переменных нужного типа сложностей нет. Причём всё сериализуется посредством юнити, Всё вызывается, методы ищутся и отрисовывается popup аналогично UnityEvent
+ возможен вывод родительских методов.
В общем максимум, что могу сдлеать для таких типов - это вывод стандартных int, float, bool, string и тп через перебор, а вот, что делать с другими Serializable классами - не знаю. Есть какие идеи?
Как я понял, в лоб это не возможно, тк SerializedProperty закреплён за SerializedObject, да и восстановить без парса исходную переменную из SerializedProperty невозможно. Буду рад, если ошибаюсь. Суть в том ,что пишу систему Event`ов, подобных UnityEvent, но с произвольным кол-вом аргументов в методе. Система завязана на рефлексии. И параметры вызываемого метода сложены в два листа - Object(для юнитевских ссылочных типов) и object(для всех остальных Serializable типах). на самом деле у меня структура сложнее, тк созданы обёртки для того, чтобы юнити хранила мета-данные(написаны сериализуемые обёртки для Type, MethodInfo, object(только для Serializable)) и индексы положения аргумента.
И с выводом произвольного кол-ва UnityEngine.Object переменных нужного типа сложностей нет. Причём всё сериализуется посредством юнити, Всё вызывается, методы ищутся и отрисовывается popup аналогично UnityEvent
+ возможен вывод родительских методов.
В общем максимум, что могу сдлеать для таких типов - это вывод стандартных int, float, bool, string и тп через перебор, а вот, что делать с другими Serializable классами - не знаю. Есть какие идеи?