public void DrawProperies(PropertyData data) { var buttons = Utilities.FindByAttribute <ButtonAttribute, MethodInfo>(data.Value); DrawMethodButtons(data, buttons, ButtonAttribute.AlignTypes.Top); Dictionary <OrderItem, string> itemList = new Dictionary <OrderItem, string>(); OrderItem items = new OrderItem("", 0); Dictionary <string, OrderItem> attrList = new Dictionary <string, OrderItem>(); var iterator = data.Property.Copy(); int index = 0; for (bool enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false) { if (string.IsNullOrEmpty(data.Property.propertyPath) || iterator.propertyPath.IndexOf(data.Property.propertyPath, StringComparison.Ordinal) == 0) { PropertyData itemData = new PropertyData(iterator.Copy(), data); if ("m_Script" == iterator.propertyPath) { EditorGUI.BeginDisabledGroup(true); Editor.Property.Draw(itemData); EditorGUI.EndDisabledGroup(); } else { string path = ""; foreach (var attribute in itemData.Attributes.Select(e => e as GroupAttribute)) { if (attribute != null) { if (!attrList.ContainsKey(attribute.Name)) { attrList.Add(attribute.Name, new OrderItem(attribute, index)); } path = path.Length < attribute.Name.Length ? attribute.Name : path; } } itemList.Add(new OrderItem(itemData, index), path); //var groupAttr = itemData.Attributes.FirstOrDefault(e => e is GroupAttribute) as GroupAttribute; //items.Add(groupAttr != null ? groupAttr.Name, , new OrderItem(itemData, index)); //AddItem(items, new OrderItem(itemData, index)); index++; } } } foreach (var pair in attrList) { items.Add(pair.Value, pair.Key); } foreach (var pair in itemList) { items.Add(pair.Key, pair.Value); } items.Sort(); items.Draw(e => Editor.Property.Draw(e.Data)); DrawMethodButtons(data, buttons, ButtonAttribute.AlignTypes.Bottom); }