Example #1
0
        public AssetBundleLoader LoadAssetBundle(string path, string tag, bool standalone, Action <AssetBundleReference> completeHandle = null)
        {
            AssetBundleLoader loader = null;

            if (string.IsNullOrEmpty(path))
            {
                return(loader);
            }

            if (m_AssetBundles.ContainsKey(path))
            {
                #if ASSETMANAGER_LOG
                Debug.Log("LoadAssetBundle asset bundle is loaded " + path + "," + Time.frameCount);
                #endif
                //asset bundle is loaded
                AssetBundleReference abr = m_AssetBundles[path];

                //refresh
                abr.AddTag(tag);

                if (standalone)
                {
                    abr.Chain();
                }

                loader           = m_LoaderManager.CreateAssetBundleAsyncLoader(path);
                loader.forceDone = true;
                loader.result    = abr;

                //call complete callback
                if (completeHandle != null)
                {
                    completeHandle(abr);
                }
            }
            else
            {
                if (m_LoadingAssetBundleLoaders.ContainsKey(path))
                {
                    #if ASSETMANAGER_LOG
                    Debug.Log("LoadAssetBundle using loading loader " + path + "," + Time.frameCount);
                    #endif
                    loader = m_LoadingAssetBundleLoaders[path];
                }
                else
                {
                    #if ASSETMANAGER_LOG
                    Debug.Log("LoadAssetBundle create new loader " + path + "," + Time.frameCount);
                    #endif
                    loader = m_LoaderManager.CreateAssetBundleAsyncLoader(path);
                    m_LoadingAssetBundleLoaders[path] = loader;
                }

                loader.AddParamTag(tag);

                if (loader.standalone == false && standalone)
                {
                    loader.standalone = true;
                }

                if (completeHandle != null)
                {
                    loader.onComplete += completeHandle;
                }

                if (loader.state == Loader.State.Idle)
                {
                    loader.onAfterComplete += OnAssetBundleLoaded;
                    loader.state            = Loader.State.Inited;
                    m_LoaderManager.ActiveLoader(loader);
                }
            }

            return(loader);
        }