/// <summary>
    /// 删除引用材质资源
    /// </summary>
    /// <param name="assetpath"></param>
    private static void deleteDpMaterialAsset(string assetpath)
    {
        var dpassets = AssetDatabase.GetDependencies(assetpath, false);

        for (int i = 0; i < dpassets.Length; i++)
        {
            var dpmatasset = AssetDatabase.LoadAssetAtPath(dpassets[i], typeof(Material));
            if (dpmatasset != null)
            {
                AssetOrganizeHelper.deleteFileAndMeta(dpassets[i]);
            }
        }
    }
    /// <summary>
    /// 整理Asset以及依赖资源
    /// </summary>
    /// <param name="asset">需要整理的Asset</param>
    /// <param name="basefolderpath">当前整理Asset整理后的基准目录(Asset同层同名文件夹)</param>
    /// <param name="shaderfolderpath">Shader所放目录</param>
    private static void organizeAsset(Object asset, string basefolderpath, string shaderfolderpath)
    {
        if (asset == null)
        {
            return;
        }

        var assetpath = AssetDatabase.GetAssetPath(asset);

        //Debug.Log(string.Format("organizeAsset() assetpath : {0}", assetpath));

        if (asset is Shader)
        {
            // Shader统一放到一个目录不进行细分
            AssetOrganizeHelper.moveFileAndMeta(assetpath, shaderfolderpath);
            return;
        }

        var assetprefabtype = PrefabUtility.GetPrefabType(asset);

        Debug.Log(string.Format("{0} prefabtype: {1}", asset, assetprefabtype.ToString()));
        //修改FBX的导入设置,避免每次都因为原材质改名生成新的Material
        //同时将FBX和上层引用他的资源放在一起,不再追溯其依赖资源,并删除其导入生成的依赖Material
        if (assetprefabtype == PrefabType.ModelPrefab)
        {
            deleteDpMaterialAsset(assetpath);
            var modelassetomporter = ModelImporter.GetAtPath(assetpath) as ModelImporter;
            modelassetomporter.importMaterials = false;
            modelassetomporter.SaveAndReimport();
            AssetOrganizeHelper.moveFileAndMeta(assetpath, basefolderpath);
            return;
        }

        var dpassets = AssetDatabase.GetDependencies(assetpath, false);

        Debug.Log(string.Format("assetpath = {0}", assetpath));
        Debug.Log(string.Format("dpassets.Length = {0}", dpassets.Length));

        //在遍历依赖之前先复制源文件,确保递归判定时文件复制优先级
        AssetOrganizeHelper.moveFileAndMeta(assetpath, basefolderpath);

        //优先预制件及其依赖资源,确保预制件和其依赖资源放在同层目录
        var nonprefablist = new List <string>();

        for (int i = 0; i < dpassets.Length; i++)
        {
            Debug.Log(string.Format("direct dp asset[{0}] : {1}", i, dpassets[i]));
            var dpasset    = AssetDatabase.LoadAssetAtPath(dpassets[i], typeof(object));
            var prefabtype = PrefabUtility.GetPrefabType(dpasset);
            Debug.Log(string.Format("{0} prefabtype: {1}", dpassets[i], prefabtype.ToString()));
            if (prefabtype != PrefabType.Prefab)
            {
                nonprefablist.Add(dpassets[i]);
                continue;
            }

            var dpassetpath         = AssetDatabase.GetAssetPath(dpasset);
            var dpassetfilenamenoex = Path.GetFileNameWithoutExtension(dpassetpath);
            var dpbaseassetfolder   = basefolderpath + "/" + dpassetfilenamenoex;
            organizeAsset(dpasset, dpbaseassetfolder, shaderfolderpath);
        }

        for (int i = 0; i < nonprefablist.Count; i++)
        {
            Debug.Log(string.Format("direct dp asset[{0}] : {1}", i, nonprefablist[i]));
            var nonprefabdpasset    = AssetDatabase.LoadAssetAtPath(nonprefablist[i], typeof(object));
            var dpassetpath         = AssetDatabase.GetAssetPath(nonprefabdpasset);
            var dpassetfilenamenoex = Path.GetFileNameWithoutExtension(dpassetpath);
            var dpbaseassetfolder   = basefolderpath + "/" + dpassetfilenamenoex;
            organizeAsset(nonprefabdpasset, dpbaseassetfolder, shaderfolderpath);
        }
    }