コード例 #1
0
    // This private method should be called after init
    void downloadSync(BundleRequest request)
    {
        if (isDownloadingWWW(request.Url) || _succeedRequest.ContainsKey(request.Url))
        {
            return;
        }

        if (isBundleUrl(request.Url))
        {
            string bundleName = Path.GetFileNameWithoutExtension(request.Url);
            if (!BundleConfigManager.BundleDataDict.ContainsKey(bundleName))
            {
                Debug.LogError("Cannot download bundle [" + bundleName + "]. It's not in the bundle config.");
                return;
            }

            List <string> dependlist = getDependList(bundleName);

            //遍历依赖包
            foreach (string bundle in dependlist)
            {
                string depBundleUrl = formatUrl(bundle);

                //如果依赖包还未加载,并且没有在处理,则进行加载,并且登记依赖
                if (!_processingRequest.ContainsKey(depBundleUrl) && !_succeedRequest.ContainsKey(depBundleUrl))
                {
                    BundleRequest dependRequest = new BundleRequest();

                    dependRequest.Url      = depBundleUrl;
                    dependRequest.priority = dependRequest.bundleData.priority;

                    //处理依赖
                    dependRequest.IsDependency = true;
                    DependenManager.AddWattingThisDependent(request.bundleData, dependRequest);

                    downloadSync(dependRequest);

                    if (dependRequest.AssetBundle != null)
                    {
                        if (!_succeedRequest.ContainsKey(dependRequest.Url))
                        {
                            _succeedRequest.Add(dependRequest.Url, dependRequest);
                        }
                    }
                }
                //未加载完成,目前正在加载中
                else if (_processingRequest.ContainsKey(depBundleUrl))
                {
                    //进行依赖登记
                    DependenManager.AddWattingThisDependent(request.bundleData, _processingRequest[depBundleUrl]);
                }
                //已经加载完成
                else if (_succeedRequest.ContainsKey(depBundleUrl))
                {
                    //直接加载依赖
                    DependenManager.LoadDependent(request.bundleData, _succeedRequest[depBundleUrl]);
                }
            }

            if (request.priority == -1)
            {
                request.priority = request.bundleData.priority;  // User didn't change the default priority
            }
            request.CreateAssetBundleSync();

            if (request.AssetBundle != null)
            {
                if (!_succeedRequest.ContainsKey(request.Url))
                {
                    _succeedRequest.Add(request.Url, request);
                }
            }
        }
        else
        {
            if (request.priority == -1)
            {
                request.priority = 0; // User didn't give the priority
            }
            request.CreateAssetBundleSync();

            if (request.AssetBundle != null)
            {
                if (!_succeedRequest.ContainsKey(request.Url))
                {
                    _succeedRequest.Add(request.Url, request);
                }
            }
        }
    }