/// <summary> /// Draws the object member. /// </summary> /// <param name="obj">Object.</param> static public void DrawObjectMember(object obj) { Type ty = obj.GetType(); var types = ty.GetPublicMemberInfos(); foreach (var t in types) { //t.SetValue (a, 1); var memberValue = t.GetValue(obj); var memberType = memberValue == null ? t.type : memberValue.GetType(); ITypeDrawer typeDrawer = InspectorDrawer.getTypeDrawer(t.type); if (typeDrawer != null) { var newValue = typeDrawer.DrawAndGetNewValue(memberType, t.name, memberValue, t); t.SetValue(obj, newValue); } else { var shouldDraw = !Attribute.IsDefined(memberType, typeof(DontDrawComponentAttribute)); if (shouldDraw) { EditorGUILayout.LabelField(t.name, memberValue.ToString()); var indent = EditorGUI.indentLevel; EditorGUI.indentLevel += 1; EditorGUILayout.BeginVertical(); { DrawObjectMember(memberValue); // foreach (var info in memberType.GetPublicMemberInfos()) { // var mValue = info.GetValue(memberValue); //// var mType = mValue == null ? info.type : mValue.GetType(); //// DrawObjectMember(mType, info.name, mValue, memberValue, info.SetValue); //// if (memberType.IsValueType) { //// setValue(target, value); //// } // DrawObjectMember(mValue); // } } EditorGUILayout.EndVertical(); EditorGUI.indentLevel = indent; } } } }
static ComponentViewHelper() { Assembly assembly = typeof(ComponentViewHelper).Assembly; foreach (Type type in assembly.GetTypes()) { if (!type.IsDefined(typeof(TypeDrawerAttribute))) { continue; } ITypeDrawer iTypeDrawer = (ITypeDrawer)Activator.CreateInstance(type); typeDrawers.Add(iTypeDrawer); } }