Esempio n. 1
0
    /// <summary>
    /// 根据依赖递归加载所有依赖资源,再加载主资源   android不能用
    /// </summary>
    private IEnumerator _LoadRecursively(string assetName, ABCallback callback, bool canUnload)
    {
        assetName = assetName.ToLower();

        if (manifest == null)
        {
            yield return(StartCoroutine(GetAssetBundleManifest()));
        }

        if (manifest != null)
        {
            string[] allDependencies = GetAssetBundleDependencies(assetName);

            for (int i = 0; i < allDependencies.Length; i++)
            {
                StartCoroutine(_LoadRecursively(allDependencies[i], null, canUnload));
            }
        }

        //已加载
        ABInfo abInfo;

        if (mAssetBundles.TryGetValue(assetName, out abInfo))
        {
            abInfo.canUnload = abInfo.canUnload && canUnload;
            if (callback != null)
            {
                callback(abInfo.ab);
            }
        }
        else
        {
            AssetBundle assetBundle = AssetBundle.LoadFromFile(PathUtils.ABPath + assetName);

            if (assetBundle != null)
            {
                assetBundle.LoadAllAssets();
                abInfo           = new ABInfo();
                abInfo.path      = assetName;
                abInfo.canUnload = canUnload;
                abInfo.ab        = assetBundle;
                mAssetBundles.Set(assetName, abInfo);
                if (callback != null)
                {
                    callback(abInfo.ab);
                }
            }
            else
            {
            }
        }
    }
Esempio n. 2
0
 /// <summary>
 /// 只通过ab路径加载路径,加载结束放入缓存,callback
 /// </summary>
 public Coroutine LoadAB(string abPath, ABCallback callback = null, bool canAutoUnload = true)
 {
     return(StartCoroutine(_LoadAB(abPath, callback, canAutoUnload)));
 }
Esempio n. 3
0
    private IEnumerator _LoadAB(string abPath, ABCallback callback, bool canUnload)
    {
        Logger.Log("_LoadAB:" + abPath);

        if (abPath == null)
        {
            yield  return(null);
        }

        abPath = abPath.ToLower();

        if (manifest == null)
        {
            yield return(StartCoroutine(GetAssetBundleManifest()));
        }

        if (manifest != null)
        {
            string[] allDependencies = GetAssetBundleDependencies(abPath);

            for (int i = 0; i < allDependencies.Length; i++)
            {
                yield return(StartCoroutine(_LoadAB(allDependencies[i], null, canUnload)));
            }
        }

        ABInfo abInfo;

        if (mAssetBundles.TryGetValue(abPath, out abInfo))
        {
            abInfo.canUnload = abInfo.canUnload && canUnload;

            if (callback != null)
            {
                callback(abInfo.ab);
            }
            yield break;
        }

        if (mLoading.Contains(abPath))
        {
            while (mLoading.Contains(abPath))
            {
                yield return(null);
            }

            if (mAssetBundles.TryGetValue(abPath, out abInfo))
            {
                abInfo.canUnload = abInfo.canUnload && canUnload;

                if (callback != null)
                {
                    callback(abInfo.ab);
                }
            }
        }
        else
        {
            string resPath = PathUtils.LoadABPath + abPath.ToLower();

            mLoading.Add(abPath);

            Logger.Log("_LoadAB resPath:" + resPath);
            WWW www = new WWW(resPath);

            yield return(www);

            mLoading.Remove(abPath);
            if (www != null && string.IsNullOrEmpty(www.error))
            {
                www.assetBundle.LoadAllAssets();
                abInfo           = new ABInfo();
                abInfo.path      = abPath;
                abInfo.canUnload = canUnload;
                abInfo.ab        = www.assetBundle;
                mAssetBundles.Set(abPath, abInfo);

                if (callback != null)
                {
                    callback(abInfo.ab);
                }
            }
            else
            {
                Logger.LogError("ResMgr load " + abPath + " failed:" + www.error);
            }
        }
    }