/// <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); } }