/// <summary>
/// 简易的ab打包方法
/// </summary>
/// <param name="PathFolder:要进行打包的目录,这里传入的PathFolder格式为Assets/aaa/bbb/"></param>
/// <param name="assetBundleFileName:给导出的资源包的名字"></param>
///
public static void BuildBundle(string PathFolder,string assetBundleFileName)
{
//获取文件夹内所有文件
DirectoryInfo dir = new DirectoryInfo(PathFolder);
FileInfo[] info = dir.GetFiles();
//声明一个哈希,为了是剔除多余的.meta文件,这里我打的是txt文件
HashSet<string> luaFormat = new HashSet<string>();
luaFormat.Add("txt");
//声明list,用来存放每个需要打包文件的地址
List<string> lst = new List<string>();
foreach (FileInfo fileInfo in info)
{
string[] s = fileInfo.Name.Split('.');
//剃出meta文件,并把每个需要打包文件的地址存入字典
if (luaFormat.Contains(s.Last()))
lst.Add(PathFolder + fileInfo.Name);
}
//这里看你要打几个资源包,我要每个文件夹打一个,所以[1]就够了
//AssetBundleBuild这个结构体里面有三个参数
//assetBundleName 需要导出的资源包的名字
//assetBundleVariant AB的变体文件,一般用于lod模型,不用的话可以不赋值
//assetNames 需要打包的所有文件地址,需要数组格式,所以我进行了转换
AssetBundleBuild[] buildBundle = new AssetBundleBuild[1];
buildBundle[0].assetBundleName = assetBundleFileName + ".assetbundle";
string[] arr = new string[lst.Count];
for (int i = 0; i < lst.Count; i++)
{
arr[i] = lst[i];
}
buildBundle[0].assetNames = arr;
//根据不同的环境进行ab打包,传参如下
//BuildPipeline.BuildAssetBundles(需要导出的目录, buildBundle, BuildAssetBundleOptions.None(一般为none,没有深究), 打包环境);
//传参的时候要注意,不管是导出的目录还是需要打包的文件地址,全部是以Assst开头的相对路径,不需要Application.dataPath等路径,否则会返回null,打包失败
#if UNITY_IPHONE
BuildPipeline.BuildAssetBundles(getBundleFolder(), buildBundle, BuildAssetBundleOptions.None, BuildTarget.iOS);
#elif UNITY_ANDROID
BuildPipeline.BuildAssetBundles(getBundleFolder(), buildBundle, BuildAssetBundleOptions.None, BuildTarget.Android);
#else
BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/config/Bundle/Lua", buildBundle, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
#endif
}
新手第一次记录,代码纯手敲没有经过运行,有bug的话@我