private void CreateBundleInfos(List <AssetReference> assetInfos, AssetBundleManifest manifest, PerformGraph.AssetGroups incomigGroups) { foreach (var assetReference in assetInfos) { if (IsUnityManifest(assetReference)) { var unityManifest = assetReference; var bundleInfo = new BundleInfo { Name = unityManifest.fileName, CRC = GetCRCFromManifest(unityManifest.path) }; var rawAssetPathesFromManifest = GetRawAssetPathesFromManifest(unityManifest.path); if (rawAssetPathesFromManifest.Any()) { // ���� � ���������� ���� "������" - ������� � ������ ����� ����� �� �������� ������ // ���� �����, �� �������� ������ ����� ��������� ��� ���������� ������, � ������� ����� // ���� �����. var rawAssetPath = rawAssetPathesFromManifest[0]; rawAssetPath = RemoveAssetsFolderFromPath(rawAssetPath); foreach (var incomigGroup in incomigGroups.assetGroups) { var groupFound = false; foreach (var reference in incomigGroup.Value) { if (reference.path.Contains(rawAssetPath)) { groupFound = true; bundleInfo.CustomInfo.Add("GroupName", incomigGroup.Key); break; } } if (groupFound) { break; } } } foreach (var rawAssetPath in rawAssetPathesFromManifest) { var pathWithoutAssetFolder = RemoveAssetsFolderFromPath(rawAssetPath); var trunkatedAssetPath = TruncatePathFromManifest(pathWithoutAssetFolder); bundleInfo.AssetInfos.Add(trunkatedAssetPath); } Debug.Log(string.Format("Bundle {0} with {1} assets added to manifest.", bundleInfo.Name, bundleInfo.AssetInfos.Count)); manifest.BundleInfos.Add(bundleInfo.Name, bundleInfo); } } }
/// <summary> /// 刷新节点渲染 /// </summary> #endregion /// <summary> /// 预览结果 编辑器连线数据,但是build模式也会执行 /// 这里只建议设置BuildingCtx的ab颗粒度 /// </summary> /// <param name="target"></param> /// <param name="nodeData"></param> /// <param name="incoming"></param> /// <param name="connectionsToOutput"></param> /// <param name="outputFunc"></param> public override void Prepare(BuildTarget target, NodeData nodeData, IEnumerable <PerformGraph.AssetGroups> incoming, IEnumerable <ConnectionData> connectionsToOutput, PerformGraph.Output outputFunc) { Debug.Log("prepare:" + this.GetType().Name + "-" + DateTime.Now.ToLongTimeString()); if (incoming == null) { return; } // AssetMultiplePackageConfigList = new List <SubPackageConfigItem>(); //prepare传入的资源 this.incommingAssetGroup = incoming.FirstOrDefault(); // this.BuildInfo = BDFrameworkAssetsEnv.BuildInfo; //this.BuildParams = BDFrameworkAssetsEnv.BuildParams; //初始化输出列表 var outMap = new Dictionary <string, Dictionary <string, List <AssetReference> > >(); foreach (var group in this.groupFilterPathDataList) { if (!string.IsNullOrEmpty(group.GroupPath)) { outMap[group.GroupPath] = new Dictionary <string, List <AssetReference> >(); } } var assetABNameList = new List <string>(); var assetRefenceList = new List <AssetReference>(); //buildAssetbundle节点传过来是 abname = arlist 这样的结构. foreach (var ags in incoming) { foreach (var group in ags.assetGroups) { assetABNameList.Add(group.Key); assetRefenceList.AddRange(group.Value); } } // //遍历分组 // foreach (var groupFilter in this.groupFilterPathDataList) // { // outMap[groupFilter.GroupPath].Add(assetPath, new List<AssetReference>(group.Value)); // } // foreach (var abname in assetABNameList) { var assetPath = AssetDatabase.GUIDToAssetPath(abname); //遍历分组 foreach (var groupFilter in this.groupFilterPathDataList) { //匹配路径分组 if (!string.IsNullOrEmpty(groupFilter.GroupPath)) { if (assetPath.StartsWith(groupFilter.GroupPath, StringComparison.OrdinalIgnoreCase)) { //查询这一组资源 foreach (var ags in incoming) { foreach (var group in ags.assetGroups) { if (group.Key.Equals(abname, StringComparison.OrdinalIgnoreCase)) { //这里是以前面传来的 分组颗粒进行添加 outMap[groupFilter.GroupPath].Add(assetPath, new List <AssetReference>(group.Value)); } } } } } } } //一次 if (connectionsToOutput != null) { foreach (var outpointNode in connectionsToOutput) { var gf = this.groupFilterPathDataList.FirstOrDefault((gpd) => gpd.OutputNodeId == outpointNode.FromNodeConnectionPointId); if (gf != null) { outputFunc(outpointNode, outMap[gf.GroupPath]); } } } }
/// <summary> /// 刷新节点渲染 /// </summary> #endregion /// <summary> /// 预览结果 编辑器连线数据,但是build模式也会执行 /// 这里只建议设置BuildingCtx的ab颗粒度 /// </summary> /// <param name="target"></param> /// <param name="nodeData"></param> /// <param name="incoming"></param> /// <param name="connectionsToOutput"></param> /// <param name="outputFunc"></param> public override void Prepare(BuildTarget target, NodeData nodeData, IEnumerable <PerformGraph.AssetGroups> incoming, IEnumerable <ConnectionData> connectionsToOutput, PerformGraph.Output outputFunc) { Debug.Log("prepare:" + this.GetType().Name + "-" + DateTime.Now.ToLongTimeString()); if (incoming == null) { return; } this.BuildingCtx = BDFrameworkAssetsEnv.BuildingCtx; //prepare传入的资源 this.incommingAssetGroup = incoming.FirstOrDefault(); //初始化输出节点 foreach (var ags in incoming) { foreach (var ag in ags.assetGroups) { this.AddOutputNode(ag.Key); } } //初始化输出列表 var outMap = new Dictionary <string, List <AssetReference> >(); foreach (var group in this.groupFilterPathDataList) { if (!string.IsNullOrEmpty(group.GroupPath)) { outMap[group.GroupPath] = new List <AssetReference>(); } } //把depend、runtime内包含的移除掉 foreach (var ags in incoming) { foreach (var group in ags.assetGroups) { var assetList = group.Value.ToList(); for (int i = assetList.Count - 1; i >= 0; i--) { var assetRef = assetList[i]; foreach (var groupFilter in this.groupFilterPathDataList) { if (!string.IsNullOrEmpty(groupFilter.GroupPath)) { //匹配路径 if (assetRef.importFrom.StartsWith(groupFilter.GroupPath, StringComparison.OrdinalIgnoreCase)) { assetList.RemoveAt(i); //依次按分组输出 outMap[groupFilter.GroupPath].Add(assetRef); } } } } outMap[group.Key] = assetList; } } //一次 if (connectionsToOutput != null) { foreach (var outpointNode in connectionsToOutput) { var groupFilter = this.groupFilterPathDataList.FirstOrDefault((gf) => gf.OutputNodeId == outpointNode.FromNodeConnectionPointId); if (groupFilter != null) { var kv = new Dictionary <string, List <AssetReference> >() { { groupFilter.GroupPath, outMap[groupFilter.GroupPath] } }; outputFunc(outpointNode, kv); } } } }