Beispiel #1
0
        protected override void OnBodyGUI()
        {
            base.OnBodyGUI();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("批处理[ " + (_root ? _root.name : "Root") + " ]下的[ " + (_componentType != null ? _componentType.FullName : "Component") + " ]组件!", MessageType.Info);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Root:", GUILayout.Width(120));
            _root = EditorGUILayout.ObjectField(_root, typeof(GameObject), true) as GameObject;
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Component Filter:", GUILayout.Width(120));
            _componentTypeFilter = EditorGUILayout.TextField(_componentTypeFilter);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Component:", GUILayout.Width(120));
            if (GUILayout.Button(_componentType != null ? _componentType.FullName : "<None>", EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = ReflectionToolkit.GetTypesInAllAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(Component)) && type.FullName.ToLower().Contains(_componentTypeFilter.ToLower()));
                });
                gm.AddItem(new GUIContent("<None>"), _componentType == null, () =>
                {
                    _componentType = null;
                });
                for (int i = 0; i < types.Count; i++)
                {
                    Type type = types[i];
                    gm.AddItem(new GUIContent(type.FullName), type == _componentType, () =>
                    {
                        _componentType = type;
                    });
                }
                gm.ShowAsContext();
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Include Inactive:", GUILayout.Width(120));
            _includeInactive = EditorGUILayout.Toggle(_includeInactive);
            EditorGUILayout.EndHorizontal();

            GUI.enabled = _root && _componentType != null && _selectionAddMethod != null;

            EditorGUILayout.BeginHorizontal();
            GUI.backgroundColor = Color.green;
            if (GUILayout.Button("Collect"))
            {
                Selection.activeGameObject = null;

                Component[] components = _root.transform.GetComponentsInChildren(_componentType, _includeInactive);
                for (int i = 0; i < components.Length; i++)
                {
                    CollectComponent(components[i]);
                }
            }
            GUI.backgroundColor = Color.white;
            EditorGUILayout.EndHorizontal();

            GUI.enabled = true;
        }
Beispiel #2
0
        protected override void OnBodyGUI()
        {
            base.OnBodyGUI();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("批处理[ " + (_folder ? _folder.name : "Root") + " ]文件夹下的[ " + (_objectType != null ? _objectType.FullName : "Object") + " ]对象!", MessageType.Info);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Folder:", GUILayout.Width(120));
            _folder = EditorGUILayout.ObjectField(_folder, typeof(DefaultAsset), false) as DefaultAsset;
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Object Filter:", GUILayout.Width(120));
            _objectTypeFilter = EditorGUILayout.TextField(_objectTypeFilter);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("Object:", GUILayout.Width(120));
            if (GUILayout.Button(_objectType != null ? _objectType.FullName : "<None>", EditorGlobalTools.Styles.MiniPopup))
            {
                GenericMenu gm    = new GenericMenu();
                List <Type> types = ReflectionToolkit.GetTypesInAllAssemblies(type =>
                {
                    return(type.IsSubclassOf(typeof(UnityEngine.Object)) && type.FullName.ToLower().Contains(_objectTypeFilter.ToLower()));
                });
                gm.AddItem(new GUIContent("<None>"), _objectType == null, () =>
                {
                    _objectType = null;
                });
                for (int i = 0; i < types.Count; i++)
                {
                    Type type = types[i];
                    gm.AddItem(new GUIContent(type.FullName), type == _objectType, () =>
                    {
                        _objectType = type;
                    });
                }
                gm.ShowAsContext();
            }
            EditorGUILayout.EndHorizontal();

            GUI.enabled = _folder && _objectType != null && _selectionAddMethod != null;

            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Collect"))
            {
                Selection.activeObject = _folder;
                UnityEngine.Object[] objs = Selection.GetFiltered(_objectType, SelectionMode.DeepAssets);
                Selection.activeObject = null;

                for (int i = 0; i < objs.Length; i++)
                {
                    CollectObject(objs[i]);
                }
            }
            EditorGUILayout.EndHorizontal();

            GUI.enabled = true;
        }