Ejemplo n.º 1
0
        /// <summary>
        /// 构建时候触发
        /// </summary>
        /// <param name="buildTarget"></param>
        /// <param name="nodeData"></param>
        /// <param name="incoming"></param>
        /// <param name="connectionsToOutput"></param>
        /// <param name="outputFunc"></param>
        /// <param name="progressFunc"></param>
        public override void Build(BuildTarget buildTarget, NodeData nodeData, IEnumerable <PerformGraph.AssetGroups> incoming, IEnumerable <ConnectionData> connectionsToOutput, PerformGraph.Output outputFunc,
                                   Action <NodeData, string, float> progressFunc)
        {
            //构建ab包
            BDFrameworkAssetsEnv.BuildingCtx.StartBuildAssetBundle(buildTarget);

            BuildingAssetResult = BDFrameworkAssetsEnv.BuildingCtx.BuildingAssetInfos.Clone();

            BDFrameworkAssetsEnv.BuildingCtx = null;
        }
Ejemplo n.º 2
0
        /// <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("【BuildAssetbundle】执行Prepare");

            if (incoming == null)
            {
                return;
            }
            this.BuildingCtx = BDFrameworkAssetsEnv.BuildingCtx;

            //这里只做临时的输出,预览用,不做实际更改
            var tempBuildAssetsInfo = this.BuildingCtx.BuildingAssetInfos?.Clone();

            if (tempBuildAssetsInfo == null)
            {
                tempBuildAssetsInfo = new BuildingAssetInfos();
            }

            Debug.Log("Buildinfo 数量:" + tempBuildAssetsInfo.AssetInfoMap.Count);
            //预计算输出,不直接修改buildinfo
            // var platform = BDApplication.GetRuntimePlatform(target);
            BDFrameworkAssetsEnv.BuildingCtx.MergeABName(tempBuildAssetsInfo);
            //对比差异文件
            BDFrameworkAssetsEnv.BuildingCtx.GetChangedAssets(tempBuildAssetsInfo, target);

            //搜集所有的 asset reference
            List <AssetReference> assetReferenceList = new List <AssetReference>();

            foreach (var ags in incoming)
            {
                foreach (var ag in ags.assetGroups)
                {
                    assetReferenceList.AddRange(ag.Value);
                }
            }

            //----------------验证资源-------------
            if (assetReferenceList.Count == BDFrameworkAssetsEnv.BuildingCtx.BuildingAssetInfos.AssetInfoMap.Count)
            {
                foreach (var ar in assetReferenceList)
                {
                    if (!this.BuildingCtx.BuildingAssetInfos.AssetInfoMap.ContainsKey(ar.importFrom))
                    {
                        Debug.LogError("【资源验证】不存在:" + ar.importFrom);
                    }
                }
            }
            else
            {
                var list = new List <string>();
                if (assetReferenceList.Count > tempBuildAssetsInfo.AssetInfoMap.Count)
                {
                    foreach (var ar in assetReferenceList)
                    {
                        if (!tempBuildAssetsInfo.AssetInfoMap.ContainsKey(ar.importFrom))
                        {
                            list.Add(ar.importFrom);
                        }
                    }

                    Debug.Log("Buildinfo缺少资源:\n " + JsonMapper.ToJson(list));
                }
                else
                {
                    foreach (var key in tempBuildAssetsInfo.AssetInfoMap.Keys)
                    {
                        var ret = assetReferenceList.Find((ar) => ar.importFrom.Equals(key, StringComparison.OrdinalIgnoreCase));
                        if (ret == null)
                        {
                            list.Add(key);
                        }
                    }

                    Debug.Log("Buildinfo多余资源:\n " + JsonMapper.ToJson(list, true));
                }

                Debug.LogErrorFormat("【资源验证】coming资源和Buildinfo资源数量不相等!{0}-{1}", assetReferenceList.Count, tempBuildAssetsInfo.AssetInfoMap.Count);
            }


            //输出节点 预览
            var outMap = new Dictionary <string, List <AssetReference> >();

            foreach (var buildAssetItem in tempBuildAssetsInfo.AssetInfoMap)
            {
                if (!outMap.TryGetValue(buildAssetItem.Value.ABName, out var list))
                {
                    list = new List <AssetReference>();
                    outMap[buildAssetItem.Value.ABName] = list;
                }

                //找到资源的assetref
                var ar = assetReferenceList.Find((a) => a.importFrom.Equals(buildAssetItem.Key, StringComparison.OrdinalIgnoreCase));
                if (ar != null)
                {
                    list.Add(ar);
                }
                else
                {
                    Debug.LogFormat("<color=red>【BuildAssetBundle】资源没有inComing:{0} </color>", buildAssetItem.Key);
                }
            }

            var output = connectionsToOutput?.FirstOrDefault();

            if (output != null)
            {
                outputFunc(output, outMap);
            }
        }