private static void RenderProperty(Proxy p, object obj) { var val = p.GetValue(); var enabled = GUI.enabled; if (!p.canWrite) GUI.enabled = false; var rendered = false; var methods = typeof(RefInspector2).GetMethods( BindingFlags.Static | BindingFlags.NonPublic); foreach(var method in methods) { if (method.ReturnType == p.type && method.GetParameters().Length == 2 && method.GetParameters()[1].ParameterType == p.type) { val = method.Invoke(null, new object[] { p.name, val }); rendered = true; break; } } if (p.type.GetInterface("IList") != null) { OnList(p, (IList)val); return; } if (!rendered && val != null) { OnObject(p.name, val); return; } if (!p.canWrite) GUI.enabled = enabled; else p.SetValue(val); }