コード例 #1
0
    public void UnloadOneBundle(string bundleId, bool unloadAll)
    {
        if (_bundlesMap.ContainsKey(bundleId))
        {
            BundleInfo bundleInfo = _bundlesMap[bundleId];

            if (bundleInfo.Bundle != null)
            {
                AssetBundlesDatabase.BundleData bundleData = bundleInfo.Data;

                foreach (var sceneName in bundleData.SceneNames)
                {
                    if (bundleInfo.Bundle == _scenesMap[sceneName].Bundle)
                    {
                        _scenesMap.Remove(sceneName);
                    }
                }

                foreach (var assetId in bundleData.AssetsIds)
                {
                    _assetIdMap.Remove(assetId);
                }

                _bundlesMap.Remove(bundleId);

                bundleInfo.Bundle.Unload(unloadAll);
                bundleInfo.Bundle = null;
                Resources.UnloadUnusedAssets();
                GC.Collect();
            }
        }
    }
コード例 #2
0
    public AssetBundlesDatabase.BundleData AddSceneBundle(string name, byte[] hash, int level, string[] sceneNames, string bundlePath)
    {
        var bundle = new AssetBundlesDatabase.BundleData();

        bundle.Name       = name;
        bundle.SceneNames = sceneNames;
        bundle.DataLevel  = level;
        AddToDatabase(bundle, hash, bundlePath);

        return(bundle);
    }
コード例 #3
0
    public AssetBundlesDatabase.BundleData AddBundle(string name, byte[] hash, int level, string bundlePath, List <string> assetIds)
    {
        var bundle = new AssetBundlesDatabase.BundleData();

        bundle.Name      = name;
        bundle.AssetsIds = assetIds;
        bundle.DataLevel = level;
        AddToDatabase(bundle, hash, bundlePath);

        return(bundle);
    }
コード例 #4
0
    public IEnumerator DoLoadOneBundle(string bundleId)
    {
        AssetBundlesDatabase database = LoadAssetBundlesDatabaseFromId(_lastRunDatabaseId);

        AssetBundlesDatabase.BundleData bundleData = null;

        foreach (var bData in database.Bundles)
        {
            if (bData.Name == bundleId)
            {
                bundleData = bData;
                break;
            }
        }

        if (bundleData != null)
        {
            BundleInfo bundleInfo = new BundleInfo(bundleData);


            int version = CachingUtils.GetVersionFromHash(bundleData.Hash);

            string databaseId = _latestDatabaseId;
            string url        = UpdateUrl + "/" + databaseId + "/";
            using (var www = WWW.LoadFromCacheOrDownload(url + bundleData.Filename,
                                                         version))
            {
                yield return(www);

                bundleInfo.Bundle = www.assetBundle;
            }

            foreach (var sceneName in bundleData.SceneNames)
            {
                _scenesMap.Add(sceneName, bundleInfo);
            }

            foreach (var assetId in bundleData.AssetsIds)
            {
                _assetIdMap[assetId] = bundleInfo;
            }

            _bundlesMap.Add(bundleData.Name, bundleInfo);
        }
    }
コード例 #5
0
    private void AddToDatabase(AssetBundlesDatabase.BundleData bundle, byte[] hash, string bundlePath)
    {
        bundle.Filename = Path.GetFileName(bundlePath);

        using (FileStream stream = File.OpenRead(bundlePath))
        {
            bundle.Size = (int)stream.Length;
            bundle.Hash = hash;

            var str = bundle.Filename + "@" + CachingUtils.GetVersionFromHash(bundle.Hash);
            bundle.CacheName = BuildUtils.ToHexString(BuildUtils.GetASCIIStringHash(str));
        }

        _database.Bundles.Add(bundle);

        // Update hash, id and size
        _database.Hash  = BuildUtils.Sha1.ComputeHash(_database.Hash.Concat(bundle.Hash).ToArray());
        _database.Id    = BuildUtils.ToHexString(_database.Hash.Take(4));
        _database.Size += bundle.Size;
        //EditorUtility.SetDirty(_database);
    }
コード例 #6
0
 public BundleInfo(AssetBundlesDatabase.BundleData data)
 {
     Data   = data;
     Bundle = null;
 }