示例#1
0
        private void DrawGameObjectItem(Object item, List <MonoBehaviour> children, bool oddLine)
        {
            var multipleMonos = children.Count > 1;

            GUILayout.BeginHorizontal(oddLine ? line1Style : line2Style);

            using (new GUILayout.VerticalScope())
            {
                var showObj = !_hidedObjects.Contains(item);

                // Label
                DrawItemTitle(goIcon, item, showObj);

                if (showObj)
                {
                    for (var i = 0; i < children.Count; i++)
                    {
                        using (var check = new EditorGUI.ChangeCheckScope())
                        {
                            var instance = children[i];
                            var cursor   = instance.GetType();
                            var show     = !_hidedMonoBehaviours.Contains(instance);
                            var fields   = UniInspectEditor.GetFields(instance);

                            var serializedObject = new SerializedObject(instance);

                            if (multipleMonos)
                            {
                                EditorGUILayout.BeginVertical(EditorStyles.helpBox);

                                var displayName = string.Format("{0} [{1}]", cursor.Name, show ? "-" : "+");
                                ToggleButton(displayName, show,
                                             () => _hidedMonoBehaviours.Add(instance),
                                             () => _hidedMonoBehaviours.Remove(instance),
                                             centeredLabelStyle);
                            }

                            if (show)
                            {
                                for (var j = 0; j < fields.Count; j++)
                                {
                                    var field = fields[j];
                                    var sp    = serializedObject.FindProperty(field.Name);

                                    if (sp == null)
                                    {
                                        continue;
                                    }

                                    EditorGUILayout.PropertyField(sp);
                                }
                            }

                            if (multipleMonos)
                            {
                                EditorGUILayout.EndVertical();
                            }

                            if (!check.changed)
                            {
                                continue;
                            }

                            serializedObject.ApplyModifiedProperties();
                        }
                    }

                    EditorGUILayout.Separator();
                }
            }

            GUILayout.EndHorizontal();
        }