コード例 #1
0
    private static void UpdateBundles()
    {
        int max = MAX_BUNDLES_PERFRAME;

        // 正在加载的bundle数量小于每帧可加载数量
        if (_toloadBundles.Count > 0 && max > 0 && _loadingBundles.Count < max)
        {
            // 把能加载的bundle加进加载队列中
            for (int i = 0; i < Math.Min(max - _loadingBundles.Count, _toloadBundles.Count); ++i)
            {
                BundleRequest item = _toloadBundles[i];
                if (item.loadState == AssetLoadState.Init)
                {
                    item.Load();
                    _loadingBundles.Add(item);
                    _toloadBundles.RemoveAt(i);
                    --i;
                }
            }
        }
        // 加载中bundleUpdate,加载完就移除
        for (var i = 0; i < _loadingBundles.Count; i++)
        {
            var item = _loadingBundles[i];
            if (item.Update())
            {
                continue;
            }
            _loadingBundles.RemoveAt(i);
            --i;
        }

        // 加载完的bundle,并且没有引用,就加进无用bundle列表
        foreach (var item in _bundles)
        {
            if (item.Value.isDone && item.Value.IsUnused())
            {
                _unusedBundles.Add(item.Value);
            }
        }

        if (_unusedBundles.Count <= 0)
        {
            return;
        }

        // 清理无用bundle列表
        for (int i = 0; i < _unusedBundles.Count; i++)
        {
            BundleRequest item = _unusedBundles[i];
            if (item.isDone)
            {
                item.Unload();
                _bundles.Remove(item.name);
                GameLog.Log("UnloadBundle: " + item.name);
            }
        }
        _unusedBundles.Clear();
    }