Esempio n. 1
0
    void AddLoadBundleTask(string assetName, GTResourceBundle bundle, GTResourceTask parentTask, System.Action <Object> callback)
    {
        GTResourceTask task = new GTResourceTask();

        task.Bundle         = bundle;
        task.LoadedDepCount = 0;
        task.Parent         = parentTask;
        task.AssetName      = assetName;
        task.AssetCallback  = callback;
        GTCoroutinueManager.Instance.StartCoroutine(LoadAsyncBundle(task));
    }
Esempio n. 2
0
    IEnumerator LoadAsyncBundle(GTResourceTask task)
    {
        GTResourceBundle taskBundle = task.Bundle;
        AssetBundle      ab         = null;

        if (taskBundle.State >= GTResourceBundle.TYPE_LOADING)
        {
            while (taskBundle.State != GTResourceBundle.TYPE_LOADED)
            {
                yield return(null);
            }
            ab = taskBundle.AB;
        }
        else
        {
            taskBundle.State = GTResourceBundle.TYPE_LOADING;
            string url = string.Format("{0}{1}/{2}", WWWPath, BundlePPath, taskBundle.AssetBundleName);
            WWW    www = new WWW(url);
            yield return(www);

            if (!string.IsNullOrEmpty(www.error))
            {
                Debug.LogError(www.error);
                yield break;
            }
            ab = www.assetBundle;
            taskBundle.State = GTResourceBundle.TYPE_LOADED;
            taskBundle.AB    = ab;
            www.Dispose();
        }

        for (int i = 0; i < taskBundle.Deps.Count; i++)
        {
            string           depAbName = taskBundle.Deps[i];
            GTResourceBundle dpBundle  = null;
            Bundles.TryGetValue(depAbName, out dpBundle);
            if (dpBundle == null)
            {
                continue;
            }
            AddLoadBundleTask(null, dpBundle, task, null);
        }
        if (task.Parent != null)
        {
            task.Parent.LoadedDepCount++;
        }
        while (task.LoadedDepCount < taskBundle.Deps.Count)
        {
            yield return(null);
        }
        AssetBundleRequest req = null;

        if (task.AssetName != null)
        {
            req = ab.LoadAssetAsync <Object>(task.AssetName);
            while (!req.isDone)
            {
                yield return(null);
            }
        }
        if (req != null)
        {
            if (req.asset == null)
            {
                Debug.LogError(ab);
                yield break;
            }
            if (task.AssetCallback != null)
            {
                task.AssetCallback.Invoke(req.asset);
            }
        }
        yield return(0);
    }