核心代碼就是 importer.assetBundleName = name; 但是在這之前,我們需要超找到具體的資源,我們當然是不希望一個一個手動去查找。如果我選擇一個文件夾,就可以查找到里邊所有的資源並且標記,那么會省去很多力氣
1. 首先選擇一個物體,獲得他的路徑
2. 剔除unity 自帶的 .meta文件
3. 遍歷選中路徑下的文件系統,如果是文件,那么標記,如果是文件夾,那么繼續向下遍歷,
3. 進行標記
這里說一下有點坑的地方,AssetImporter.GetAtPath(path); 這個IPA,里邊的path不能是e:/sss/sss/xxx這種的,需要是相對路徑Assets/xxx/xxx 這個坑坑的我好慘
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; public class BuilderAssetsBunlds { //打包、、、、、、、、、、、、、、、、、、、、、、 [MenuItem("Tools/打包")] public static void BundlerAssets() { // Debug.LogError("打包Assets"); BuildPipeline.BuildAssetBundles(GetOutAssetsDirecotion(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); } public static string GetOutAssetsDirecotion() { string assetBundleDirectory = Application.streamingAssetsPath; if (!Directory.Exists(assetBundleDirectory)) { Directory.CreateDirectory(assetBundleDirectory); } return assetBundleDirectory; } // 設置資源名稱///////////////////////////// [MenuItem("Tools/設置Assetbundle名字")] public static void SetAssetBundellabls() { CheckFileSystemInfo(); } public static void CheckFileSystemInfo() //檢查目標目錄下的文件系統 { AssetDatabase.RemoveUnusedAssetBundleNames(); //移除沒有用的assetbundlename Object obj = Selection.activeObject; //選中的物體 string path = AssetDatabase.GetAssetPath(obj);//選中的文件夾 CoutineCheck(path); } public static void CheckFileOrDirectory(FileSystemInfo fileSystemInfo, string path) //判斷是文件還是文件夾 { FileInfo fileInfo = fileSystemInfo as FileInfo; if (fileInfo != null) { SetBundleName(path); } else { CoutineCheck(path); } } public static void CoutineCheck(string path) //是文件,繼續向下 { DirectoryInfo directory = new DirectoryInfo(@path); FileSystemInfo[] fileSystemInfos = directory.GetFileSystemInfos(); foreach (var item in fileSystemInfos) { // Debug.Log(item); int idx = item.ToString().LastIndexOf(@"\"); string name = item.ToString().Substring(idx + 1); if (!name.Contains(".meta")) { CheckFileOrDirectory(item, path + "/" + name); //item 文件系統,加相對路徑 } } } public static void SetBundleName(string path) //設置assetbundle名字 { var importer = AssetImporter.GetAtPath(path); string[] strs = path.Split('.'); string[] dictors = strs[0].Split('/'); string name = ""; for (int i = 1; i < dictors.Length; i++) { if (i < dictors.Length - 1) { name += dictors[i] + "/"; } else { name += dictors[i]; } } if (importer != null) { importer.assetBundleVariant = "bytes"; importer.assetBundleName = name; } else Debug.Log("importer是空的"); } }
下篇連接
http://www.cnblogs.com/lzy575566/p/7895291.html