unity普通资源打包
前言
unity资源,通常分为八类,即音效,特效,模型,shader,icon,字体,场景,ui.
音效、shader、icon、字体,打包策略比较简单,是直接标记ab的方式进行打包。
其他资源为了防止冗余,也为了减少包体大小等原因,中间进行拆解资源、归类后,对细小资源进行打包,加载时再逆向加载出去,打资源拼回来。本节先讲述简单资源的打包。
业务流程
- 清空ab标记
- 找到需要打包的文件及路径
- 标记ab名及后缀(assetImporter)
- 调用打包api,传入平台名,设置资源打包的输出位置等。
- 根据需要,删除Manifest文件
- 清空ab标记
- 资源刷新
代码流程:
1、文件操作,查找到需要打包的文件,再进行ab标记
static void SearchFileNeedBuild(string buildPath, List<string> suffix)
{
//查找到需要打包的文件
string[] filePaths = Directory.GetFiles(buildPath);
for (int i = 0; i < filePaths.Length; i++)
{
if (filePaths[i] == buildPath) continue;
string _filePath = filePaths[i];
foreach (string suf in suffix)
{
if (_filePath.Contains(suf))
{
if (!_filePath.Contains("meta"))
{
string fileName = Path.GetFileName(_filePath);
int idx = _filePath.IndexOf("Assets");
string impPath = _filePath.Substring(idx);
//ab标记
AssetImporter assetImporter = AssetImporter.GetAtPath(impPath);
assetImporter.assetBundleName = fileName;
Debug.Log("fileName");
assetImporter.assetBundleVariant = ABSUFFIX;
}
}
}
}
}
2、调用打包接口
调用打包接口后,unity会自动对已经标记的资源,在指定位置生成ab文件
static void BuildBundle(string outputPath)
{
if (Directory.Exists(outputPath))
{
Directory.Delete(outputPath, true);
}
AssetDatabase.Refresh();
Directory.CreateDirectory(outputPath);
BuildPipeline.BuildAssetBundles(outputPath, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
}