void ShowFieldInfo(Type type, MonoImporter importer, List<string> names, List<Object> objects, ref bool didModify) { // Only show default properties for types that support it (so far only MonoBehaviour derived types) if (!IsTypeCompatible(type)) return; ShowFieldInfo(type.BaseType, importer, names, objects, ref didModify); FieldInfo[] infos = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly); foreach (FieldInfo field in infos) { if (!field.IsPublic) { object[] attr = field.GetCustomAttributes(typeof(SerializeField), true); if (attr == null || attr.Length == 0) continue; } if (field.FieldType.IsSubclassOf(typeof(Object)) || field.FieldType == typeof(Object)) { Object oldTarget = importer.GetDefaultReference(field.Name, out var instanceID); if(oldTarget == null && instanceID != 0) { oldTarget = Object.CreateMissingReferenceObject(instanceID); } Object newTarget = EditorGUILayout.ObjectField(ObjectNames.NicifyVariableName(field.Name), oldTarget, field.FieldType, false); names.Add(field.Name); objects.Add(newTarget); if (oldTarget != newTarget) didModify = true; } } }