Так можно сделать
Используется 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.