通过代码设置资源名字,为打包AssetBundle做准备,以及新打包系统
核心代码就是 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