void AnalyzeGameObject() { _monoInfos.Clear(); Component[] components = _gameObject.GetComponents <Component>(); foreach (var component in components) { var componentType = component.GetType(); _MonoInfo monoInfo = new _MonoInfo(); _monoInfos.Add(monoInfo); monoInfo.name = componentType.Name; while (componentType != null && Array.IndexOf(_blacklistTypes, componentType) == -1) { _ComponentInfo componentInfo = GetComponentInfo(componentType, component); monoInfo.componentInfos.Add(componentInfo); componentType = componentType.BaseType; } } }
_ComponentInfo GetComponentInfo(Type type, object component) { _ComponentInfo componentInfo = new _ComponentInfo(); componentInfo.name = type.Name; var fieldInfos = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var fieldInfo in fieldInfos) { try { var value = fieldInfo.GetValue(component); _FieldInfo fi = new _FieldInfo(); fi.name = fieldInfo.Name; fi.type = fieldInfo.FieldType.Name; fi.value = (value != null) ? value.ToString() : "null"; componentInfo.fieldInfos.Add(fi); } catch { } } var propertyInfos = type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var property in propertyInfos) { // Query for deprecated value will yield exception try { var value = property.GetValue(component, null); _FieldInfo fi = new _FieldInfo(); fi.name = property.Name; fi.type = property.PropertyType.Name; fi.value = (value != null) ? value.ToString() : "null"; componentInfo.fieldInfos.Add(fi); } catch { } } return(componentInfo); }