/// <summary> /// 加载AssetBundle打包信息 /// </summary> private void loadAssetBundleBuildInfo() { // 确保之前加载的AB打包信息卸载彻底 if (mAssetBundleBuildInfo != null) { Resources.UnloadAsset(mAssetBundleBuildInfo); mAssetBundleBuildInfo = null; } // AssetBundle打包信息比较特殊,在未加载完成前拿不到AB名字映射 // 所以这里单独特殊加载,不走正常流程 var abpath = AssetBundlePath.GetABLoadFullPath(ResourceConstData.AssetBundleBuildInfoAssetName); AssetBundle ab = null; ab = AssetBundle.LoadFromFile(abpath); if (ab != null) { mAssetBundleBuildInfo = ab.LoadAsset <AssetBundleBuildInfoAsset>(ResourceConstData.AssetBundleBuildInfoAssetName); mAssetBundleBuildInfo.init(); ab.Unload(false); Debug.Log("AssetBundle打包信息文件加载成功!"); } else { Debug.LogError($"找不到AssetBundle打包信息文件:{ResourceConstData.AssetBundleBuildInfoAssetName}"); } }
/// <summary> /// 更新AssetBundle打包编译信息Asset /// </summary> /// <param name="buildinfolist"></param> /// <param name="abmanifest"></param> private void UpdateAssetBundleBuildInfoAsset(List <AssetBundleBuild> buildinfolist, Dictionary <string, AssetBundleBuildInfo> abbuildinfomap) { // Note: AssetBundle打包信息统一存小写,确保和AB打包那方一致 var assetbundlebuildinfoassetrelativepath = $"Assets{ResourceConstData.AssetBundleBuildInfoAssetRelativePath}/{ResourceConstData.AssetBundleBuildInfoAssetName}.asset"; var assetbundlebuildasset = AssetDatabase.LoadAssetAtPath <AssetBundleBuildInfoAsset>(assetbundlebuildinfoassetrelativepath); if (assetbundlebuildasset == null) { assetbundlebuildasset = new AssetBundleBuildInfoAsset(); AssetDatabase.CreateAsset(assetbundlebuildasset, assetbundlebuildinfoassetrelativepath); } assetbundlebuildasset.AssetBuildInfoList.Clear(); // Asset打包信息构建 foreach (var bi in buildinfolist) { var abbi = new AssetBuildInfo(); // 剔除后缀(默认采用无后缀形式加载,同目录同名不同类型采用泛型加载匹配) abbi.AssetPath = bi.assetNames[0].Substring(0, bi.assetNames[0].Length - Path.GetExtension(bi.assetNames[0]).Length).ToLower(); abbi.ABPath = bi.assetBundleName.ToLower(); abbi.ABVariantPath = bi.assetBundleVariant.ToLower(); assetbundlebuildasset.AssetBuildInfoList.Add(abbi); } // AssetBundle打包信息构建 assetbundlebuildasset.AssetBundleBuildInfoList.Clear(); assetbundlebuildasset.AssetBundleBuildInfoList = abbuildinfomap.Values.ToList(); EditorUtility.SetDirty(assetbundlebuildasset); AssetDatabase.SaveAssets(); }