예제 #1
0
        IEnumerator RealLoadAssetBundle(AssetTask assetTask)
        {
            assetTask.abName = ALG.DecodeBundleName(assetTask.abName);
            var dependencies = _assetDependency.GetDependencies(ALG.EncodeBundleName(assetTask.abName));
            var taskArray    = new AssetTask[dependencies.Length];

            for (var i = 0; i < dependencies.Length; i++)
            {
                var task = new AssetTask(dependencies[i], null, null, null, null);
                taskArray[i] = task;
                new Task(RealLoadAssetBundle(task), "AssetBundleManager_" + task.abName);
            }
            var j = 0;

            while (j < taskArray.Length)
            {
                if (taskArray[j].isFinish)
                {
                    j++;
                }
                else
                {
                    yield return(null);
                }
            }
            _assetBundleLoader.LoadAssetBundle(assetTask.abName, (AssetBundle ab) =>
            {
                _assetBundleLoader.GetAssetBundle(assetTask.abName).AddReference();
                assetTask.isFinish = true;
            }, null);
            while (!assetTask.isFinish)
            {
                yield return(null);
            }
        }
예제 #2
0
        private void RealUnloadAssetWithName(string name)
        {
            name = ALG.DecodeBundleName(name);
            string[] dependencies = _assetDependency.GetDependencies(ALG.EncodeBundleName(name));
            for (int i = 0; i < dependencies.Length; i++)
            {
                RealUnloadAssetWithName(dependencies[i]);
            }
            var abCache = _assetBundleLoader.GetAssetBundle(name);

            if (null == abCache)
            {
                return;
            }
            abCache.RemoveReference();
            if (0 >= abCache.ReferencesCount)
            {
                releaseList.Add(abCache);
            }
        }