Изменить в инспекторе поле для моего типа

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

Изменить в инспекторе поле для моего типа

Сообщение DDDENISSS 19 апр 2012, 22:39

Есть скрипт.
В этом скрипте есть список объектов.
И есть поля - объекты из списка(или их id). Или даже не поля этого типа, а массивы.
Хочу сделать, чтобы в инспекторе при нажатии на эти поля выпадал список тех объектов и можно было выбрать любой объект из списка.
Только не писать код для каждой переменной, а изменить сразу для всех переменных конкретного типа в этом скрипте.
Можно ли как-то такое сделать?
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: Изменить в инспекторе поле для моего типа

Сообщение DDDENISSS 20 апр 2012, 19:55

Так можно сделать
Синтаксис:
Используется csharp
        void OnEnable() {
                map = (Map)target;
                FieldInfo[] fields = typeof(Map).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
               
                List<SerializedProperty> list = new List<SerializedProperty>();
                foreach(FieldInfo field in fields) {
                        SerializedProperty property = serializedObject.FindProperty( field.Name );
                        if( property != null ) list.Add( property );
                }
                properties = list.ToArray();
        }

        public override void OnInspectorGUI() {
                EditorGUIUtility.LookLikeInspector();
               
                foreach(SerializedProperty property in properties) {
                        if( property.type == typeof(Block).Name ) { // my type
                                //.....
                               
                        } else { // other type
                                EditorGUILayout.PropertyField(property, true);
                        }
                }
               
        }
 


Вот только можно ли как-то проще получить список сериализованных полей?
И можно ли более проще сравнить тип SerializedProperty с моим? А то сейчас у меня имена сравниваются.

Получить список полей и рисовать их лучше так:
SerializedProperty iterator = serializedObject.GetIterator();
iterator.NextVisible(true);
while(iterator.NextVisible(false)) {
EditorGUILayout.PropertyField(iterator, true);
}
Только изменить поле можно будет только для корневых элементов. К чальдам доступ не получишь. И то я толком не понял как определить тип SerializedProperty.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33


Вернуться в Editor

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

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