Unity 编辑器扩展—枚举类型多选搜索UnityAsset文件

枚举搜索类型
    [Flags]//表明选择值的集合,可做位运算
    private enum SearchType
    {
        AnimationClip = 1 << 0,
        AudioClip = 1 << 1,
        AudioMixer = 1 << 2,
        Font = 1 << 3,
        GUISkin = 1 << 4,
        Material = 1 << 5,
        Mesh = 1 << 6,
        Model = 1 << 7,
        PhysicMaterial = 1 << 8,
        Prefab = 1 << 9,
        Scene = 1 << 10,
        Script = 1 << 11,
        Shader = 1 << 12,
        Sprite = 1 << 13,
        Texture = 1 << 14
    }
指定类型
        private SearchType _searchType;//搜索类型集合
        private string _typeToString;//类型转string
        private string _typeFilter;//搜索匹配类型filter
        private GUIStyle _typeStyle;//编辑器显示风格
        //枚举选择
   	    _searchType= (SearchType)EditorGUILayout.EnumMaskField(_searchType);
   	    //如出现全选或全选后去除元素后枚举值将变为负数
        if ((int)_searchType< 0)
        {
            var bits = 0;
            //遍历枚举值
            foreach (var enumValue in System.Enum.GetValues(typeof(SearchType)))
            {
                //‘&’运算符进行去除判断,&~=  进行去除
                var checkBit = (int)_searchType& (int)enumValue;
                //如果去除后不为零,说明还含有其他元素
                if (checkBit != 0)
                {
                    //‘|’运算符进行添加
                    bits |= (int)enumValue;
                }
            }
            //赋值枚举值
            _searchType= (SearchType)bits;
        }
        //选择类型集合转换为字符串
        _typeToString= _searchType.ToString();
        if (_typeToString== "0" || _typeToString== null)
        {
            _typeToString= "请选择搜索类型…";
        }
        _typeStyle = new GUIStyle();
        _typeStyle .wordWrap = true;
        _typeStyle .normal.textColor = Color.green;
        //选择类型显示
        _typeToString= EditorGUILayout.TextField(_typeToString, _typeStyle);
        //转换为搜索类型filter
    	foreach (var type in _typeTostring.Split(','))
	    {
        	_typeFilter+= " t:" + type;
    	}
获取路径
		    private string[] _searchFolders;//搜索路径
            var selectObjects=Selection.GetFiltered(typeof(DefaultAsset), SelectionMode.Unfiltered);
            if (selectObjects != null)
            {
                _searchFolders=new string[selectObjects.length];
                var count =0;
                foreach (DefaultAsset asset in selectObjects)
                {
                    var path=AssetDatabase.GetAssetPath(asset);
                    _searchFolders[count]=path;
                    count++;
                }
            }
            //去除重复
            _searchFolders= _searchFolders.Distinct<string>();         
选中搜索物体
			private Object[] _searchObjects;
	        //搜索指定路径下选择类型
            var guids= AssetDatabase.FindAssets(_typeFilter, _searchFolders);
            _searchObjects=new Object[guids.length];
            var count=0;
            foreach (var guid in guids)
            {
               var path=AssetDatabase.GUIDToAssetPath(guid);
               var obj=AssetDatabase.LoadAssetAtPath<Object>(path));
               _searchObjects[count]=obj;
               count++;
            }
            //选中搜索结果
            Selection.objects = _searchObjects;
示例

在这里插入图片描述

你可能感兴趣的:(Unity 编辑器扩展—枚举类型多选搜索UnityAsset文件)