コード例 #1
0
        public void BeginLoad()
        {
#if DEBUG_BUNDLE_CACHE
            ResourceMgr.Instance().SampleLoadEvent(mName, 2);
#endif
            BundleIndexItemInfo item = GetAssetBelongBundleIndexItemInfo(mName, IsFromWeb);
            if (item == null)
            {
                throw new System.Exception($"{mName} belong bundle not found");
            }

            m_fileName = item.BundleHashName;
            mName      = item.BundleName;

            string name = WWWUtil.RES_BUNDLE_ORIGINAL_NAME ? mName : m_fileName;

            if (ResourceModule.Instance.UseAssetBundleLoadFromFile && mWWWType == WWWType.AssetBundle)
            {
                //abRequest = WWWUtil.CreateAssetbundleAsync(name, IsFromStream, IsFromWeb);
                abRequest = CreateAsyncAssetBundleRequest(name);
            }
            else
            {
                loadWWW = CreateWWWRequest(name);
            }

            mBeginLoadTime = 0;
        }
コード例 #2
0
ファイル: GOEResList.cs プロジェクト: kingpowervrg/my_seeker
        internal void AddBundle(string name, string asset = null)
        {
            foreach (string res in mListRes)
            {
                if (res == name)
                {
                    return;
                }
            }

            if (name.Length == 0)
            {
                Debug.LogError(" ResList:AddBundle name can't empty");
                return;
            }
            BundleInfo bundle = ResourceMgr.Instance().GetBundle(name);

            if (bundle == null)
            {
                Debug.LogError("Cannot find bundle " + name);
            }
            mListRes.Add(name);

            if (asset == null)
            {
                asset = bundle.Files.ElementAt(bundle.Files.Count - 1);
            }
            mListAsset.Add(asset);
            foreach (var i in bundle.DependsOn)
            {
                BundleInfo dep = ResourceMgr.Instance().GetBundle(i);
                mListRes.Add(i);
                mListAsset.Add(dep.FirstAsset);
            }
        }
コード例 #3
0
        public AssetInfo GetAssetInCache(string name)
        {
            var bName = ResourceMgr.Instance().GetBundleName(name);
            BundleInfoResource b;

            if (cachedBundles.TryGetValue(bName, out b))
            {
                var asset = b[name];
                b.Touch();
                if (asset != null)
                {
                    return(asset);
                }
                else
                {
                    if (addedAssets.TryGetValue(name, out asset))
                    {
                        return(asset);
                    }
                }
            }
            else
            {
                AssetInfo asset;
                if (addedAssets.TryGetValue(name, out asset))
                {
                    return(asset);
                }
            }
            return(null);
        }
コード例 #4
0
        internal void GetScene(string name, Action callBack, LoadPriority priority = LoadPriority.Default, bool isAdditive = false)
        {
            mIsAdditive = isAdditive;

            string bundleName = this.ResourceMgr.GetBundleName(name);

            if (string.IsNullOrEmpty(bundleName))
            {
                bundleName = this.ResourceMgr.GetBundleName(name + ".unity");
            }
            if (bundleName == string.Empty)
            {
                Debug.LogError("can not find scene: " + name);
                return;
            }
            bool isCached = ResourceMgr.IsBundleCached(bundleName);

            if (/*GOERootCore.IsEditor ||*/ HasLoaded(name) || isCached)
            {
                if (mCurScene.ToLower() != name.ToLower())
                {
                    if (isCached)
                    {
                        var bundle = ResourceMgr.AssetBundleGroup.CacheManager.Cache[bundleName];
                        bundle.IsSceneBundle = true;//Set to active scene bundle
                        bundle.Touch();
                    }
                    LoadScene(name);
                    if (callBack != null)
                    {
                        callBack();
                    }
                    return;
                }
                else
                {
                    removeBundle(name);
                }
            }

            mCurScene        = name;
            getSceneCallback = callBack;

            ResourceMgr.AssetBundleGroup.PreloadBundle(bundleName, OnLoadAssetBundle, LoadPriority.MostPrior, true);

            /*Resource res = this.GetDownloadResource(bundleName);
             * if (res == null)
             * {
             *  res = this.CreateResource(bundleName, priority);
             *  res.LoadRes();
             * }
             *
             * //逻辑加载时,提高优先级//
             * if (res.Loader.Priority < priority)
             * {
             *  this.ResourceMgr.GOELoaderMgr.SetLoaderPriority(res.Loader, priority);
             * }
             * res.AddGotSceneCallback(callBack);*/
        }
コード例 #5
0
        internal void GetAsset(string name, Action <string, UnityEngine.Object> callback, LoadPriority priority = LoadPriority.Default)
        {
            if (name == null || name == string.Empty)
            {
                return;
            }

            if (HasLoaded(name))
            {
                if (callback != null)
                {
                    GetAssetInCache(name, callback, priority);
                }
                return;
            }
#if UNITY_EDITOR
            UnityEngine.Object obj = LoadFromPrefab(name, typeof(UnityEngine.Object));
            if (obj != null)
            {
                SetAsset(name, obj).Reference = 1;
                UnityEngine.Object ins = AssetInfo.IsNeedInstance(obj, name) ? GameObject.Instantiate(obj) : obj;
                if (callback != null)
                {
                    callback(name, ins);
                }
                return;
            }
#endif
            string bundleName = ResourceMgr.GetBundleName(name);
            if (bundleName == string.Empty)
            {
                DebugUtil.LogError("can not find asset: " + name);
                return;
            }

            cacheMgr.AddCallbackToDic(name, callback);
            if (!cacheMgr.HasLoadingInfo(bundleName))
            {
                Resource res = this.GetDownloadResource(bundleName);
                if (res == null)
                {
                    res = this.CreateResource(bundleName, priority);
                    res.LoadRes();
                }
                if (res.InvalidBundle)
                {
                    res.InvalidBundle = false;
                }
                //逻辑加载时,提高优先级//
                if (res.Loader.Priority < priority)
                {
                    this.ResourceMgr.GOELoaderMgr.SetLoaderPriority(res.Loader, priority);
                }
            }
            else
            {
                cacheMgr.CheckAssetLoading(bundleName, name, priority);
            }
        }
コード例 #6
0
 public static ResourceMgr Instance()
 {
     if (resourceMgr == null)
     {
         resourceMgr = new ResourceMgr();
     }
     return(resourceMgr);
 }
コード例 #7
0
        public override void Start()
        {
            resourceMgr = ResourceMgr.Instance;
            resourceMgr.Start();

            UseAssetBundleLoadFromFile = true;

            RegisterInternelEvents();
        }
コード例 #8
0
ファイル: GOEResList.cs プロジェクト: kingpowervrg/my_seeker
        internal void AddAsset(string name)
        {
            string bundleName = ResourceMgr.Instance().GetBundleName(name);

            if (bundleName != string.Empty)
            {
                this.AddBundle(bundleName, name);
            }
        }
コード例 #9
0
        protected override Resource CreateResource(string name, LoadPriority priority)
        {
            Resource res = base.CreateResource(name, priority);

#if DEBUG_BUNDLE_CACHE
            ResourceMgr.Instance().SampleLoadEvent(name, 1);
#endif
            res.AddGotBundleCallback(this.OnLoadAssetBundle);

            return(res);
        }
コード例 #10
0
        internal ResourceState PreloadBundle(string bundleName, Action <string, AssetBundle> callback, LoadPriority priority = LoadPriority.Default, bool dependencyResource = false)
        {
            BundleInfo bundle = ResourceMgr.Instance().GetBundle(bundleName);

            if (bundle == null)
            {
                var bn = ResourceMgr.GetBundleName(bundleName);
                if (string.IsNullOrEmpty(bn))
                {
                    DebugUtil.LogError("Cannot find asset:" + bundleName);
                    return(ResourceState.Failed);
                }
                bundleName = bn;
            }
            var cb = cacheMgr.Cache[bundleName];

            if (cb != null)
            {
                if (callback != null)
                {
                    callback(bundleName, cb.AssetBundle);
                }
                return(ResourceState.OK);
            }
            Resource res = this.GetDownloadResource(bundleName);

            if (res == null)
            {
                if (!cacheMgr.HasLoadingInfo(bundleName))
                {
                    res = this.CreateResource(bundleName, priority);
                    res.DependencyResource = dependencyResource;
                    res.LoadRes();
                }
                cacheMgr.AddCallbackToDic(bundleName, callback);
            }
            else if (res.ResOK)
            {
                if (callback != null)
                {
                    callback(bundleName, res.Loader.AssetBundle);
                }
                return(ResourceState.OK);
            }
            else
            {
                cacheMgr.AddCallbackToDic(bundleName, callback);
                if (res.Loader.Priority < priority)
                {
                    this.ResourceMgr.GOELoaderMgr.SetLoaderPriority(res.Loader, priority);
                }
            }
            return(ResourceState.Wait);
        }
コード例 #11
0
ファイル: GOEResource.cs プロジェクト: kingpowervrg/my_seeker
 public void LoadRes()
 {
     if (mResLoader.State == LoaderState.None)
     {
         if (!DependencyResource)
         {
             mResLoader.IsRawResource = true;
         }
         mResLoader.Name = mName;
         ResourceMgr.Instance().GOELoaderMgr.AddLoader(mResLoader);
     }
 }
コード例 #12
0
        internal override bool RemoveAsset(string name, bool force = true, bool removeInBundleAsset = true)
        {
            string             bundleName     = ResourceMgr.GetBundleName(name);
            BundleInfoResource bundleResource = cacheMgr.Cache[bundleName];

            if (bundleResource != null)
            {
                return(bundleResource.RemoveAsset(name, force, removeInBundleAsset));
            }

            return(false);
        }
コード例 #13
0
ファイル: WWWLoader.cs プロジェクト: kingpowervrg/my_seeker
        private static WWW createWWW(string path, bool isRaw)
        {
            WWW www = isRaw || DisableLoadCache ? new WWW(path) : WWW.LoadFromCacheOrDownload(path, 1);

            if (ResourceMgr.Instance().LowAsyncLoadPriority)
            {
                www.threadPriority = UnityEngine.ThreadPriority.Low;
            }
            else
            {
                www.threadPriority = UnityEngine.ThreadPriority.High;
            }
            return(www);
        }
コード例 #14
0
        public bool ReleaseAssetReference(string name, UnityEngine.Object obj)
        {
            var bName = ResourceMgr.Instance().GetBundleName(name);
            BundleInfoResource b;

            if (cachedBundles.TryGetValue(bName, out b))
            {
                var asset = b[name];
                if (asset != null)
                {
                    asset.ReleaseAssetReference(obj);
                    return(true);
                }
            }
            return(false);
        }
コード例 #15
0
        public static BundleInfoMapItem GetFinalBundle(string name, bool fromWeb = false)
        {
            BundleInfoMapItem item = null;

            if (!fromWeb)
            {
                item = ResourceMgr.Instance().BundleRename.GetBundleItemFromOriginalName(name);
            }
            if (null == item)
            {
                item           = new BundleInfoMapItem();
                item.FinalName = name;
            }

            return(item);
        }
コード例 #16
0
        public void SampleLoadEvent(string bn, int eventID)
        {
            GOEAssetBundleProfileInfo pi = null;
            float time = Time.realtimeSinceStartup;

            if (info.TryGetValue(bn, out pi))
            {
                switch (eventID)
                {
                case 2:
                    pi.WWWStartTime = time;
                    break;

                case 3:
                    pi.WWWFinishTime = time;
                    break;

                case 4:
                    pi.ResourceReadyTime = time;
                    break;

                case 5:
                    pi.AssetLoadStartTime = time;
                    break;

                case 6:
                    pi.AssetLoadFinishTime = time;
                    break;

                case 7:
                    pi.EndTime = time;
                    break;
                }
            }
            else if (eventID == 1)
            {
                pi            = new GOEAssetBundleProfileInfo();
                pi.BundleName = bn;
                BundleInfo bundle = ResourceMgr.Instance().GetBundle(bn);
                pi.BundleSize = bundle.Size;
                pi.StartTime  = time;
                info[bn]      = pi;
                loadingBundle++;
            }
        }
コード例 #17
0
        void BeginPreload()
        {
            BundleInfo bundle = ResourceMgr.Instance().GetBundle(mName);

            pendingDependencies = null;
            if (bundle != null)
            {
                foreach (var dep in bundle.DependsOn)
                {
                    if (pendingDependencies == null)
                    {
                        pendingDependencies = new HashSet <string>();
                    }
                    pendingDependencies.Add(dep);
                    ResourceModule.Instance.PreloadBundle(dep, OnPreloadBundle, Priority, true);
                }
            }
        }
コード例 #18
0
        public void Update()
        {
            if (mState == MultiLoaderState.None)
            {
                BeginPreload();
                NextState();
            }
            else if (mState == MultiLoaderState.Preload)
            {
                if (pendingDependencies == null || pendingDependencies.Count == 0)
                {
                    BeginLoad();
                    NextState();
                }
            }
            if (mState == MultiLoaderState.Load)
            {
                if (IsAllDone())
                {
#if DEBUG_BUNDLE_CACHE
                    ResourceMgr.Instance().SampleLoadEvent(mName, 3);
#endif
                    NextState();
                }
                float pro = Progress;

                if (pro != mLastProgress)
                {
                    mLastProgress  = pro;
                    mBeginLoadTime = 0;
                }
                else
                {
                    mBeginLoadTime += Time.deltaTime;
                }

                if (mBeginLoadTime >= MaxLoadTime)
                {
                    mState = MultiLoaderState.None;

                    //Logger.GetFile( LogFile.Res ).LogError( "dead link: " + mName );
                }
            }
        }
コード例 #19
0
        internal void EnsureDependencies(string name)
        {
            RuntimeBundleInfo assetBelongBundleInfo = ResourceMgr.GetBundleInfo(name);

            if (assetBelongBundleInfo == null)
            {
                Debug.LogError($"can't find asset {name} belong bundle");
                return;
            }

            for (int i = 0; i < assetBelongBundleInfo.BundleDependencyArray.Length; ++i)
            {
                string dependencyBundleName = assetBelongBundleInfo.BundleDependencyArray[i];
                if (!HasLoaded(dependencyBundleName))
                {
                    ResourceModule.Instance.PreloadBundle(dependencyBundleName, null);
                }
            }
        }
コード例 #20
0
        protected virtual Resource CreateResource(string name, LoadPriority priority)
        {
            Resource res = new Resource();

            res.Name            = name;
            res.Loader.Priority = priority;
            mDownResource.Add(res);

            BundleInfo bundle = ResourceMgr.GetBundle(name);

            if (bundle != null)
            {
                res.Size = bundle.Size;
            }

            res.AddGotWWWCallback(this.OnLoadWWW);

            return(res);
        }
コード例 #21
0
        public void Update()
        {
            //第一步:加载依赖包
            if (mState == MultiLoaderState.None)
            {
                BeginPreload();
                NextState();
            }
            else if (mState == MultiLoaderState.Preload)        //第二步:依赖包都有效的情况下,加载本资源
            {
                if (m_pendingDependencies == null || m_pendingDependencies.Count == 0)
                {
                    BeginLoad();
                    NextState();
                }
            }
            if (mState == MultiLoaderState.Load)        //第三步:检查当前资源是否加载完成
            {
                if (IsAllDone())
                {
#if DEBUG_BUNDLE_CACHE
                    ResourceMgr.Instance().SampleLoadEvent(mName, 3);
#endif
                    NextState();
                }
                float pro = Progress;

                if (pro != mLastProgress)
                {
                    mLastProgress  = pro;
                    mBeginLoadTime = 0;
                }
                else
                {
                    mBeginLoadTime += Time.deltaTime;
                }

                if (mBeginLoadTime >= MaxLoadTime)
                {
                    mState = MultiLoaderState.None;
                }
            }
        }
コード例 #22
0
 internal override void Start()
 {
     foreach (string name in mListRes)
     {
         BundleInfo bundle = ResourceMgr.Instance().GetBundle(name);
         if (bundle == null)
         {
             //Logger.GetFile( LogFile.Res ).LogError( name + " not find in FireBundle" );
         }
         else
         {
             mTotalSize += bundle.Size;
         }
         progressMap[name] = 0;
     }
     if (mListRes.Count == 0)
     {
         //Logger.GetFile( LogFile.Res ).LogError(" mListRes.Count == 0" );
     }
 }
コード例 #23
0
        public void BeginLoad()
        {
            mRealName = mName;
#if DEBUG_BUNDLE_CACHE
            ResourceMgr.Instance().SampleLoadEvent(mName, 2);
#endif
            BundleInfoMapItem item = GetFinalBundle(mName, IsFromWeb);
            mRealName = item.FinalName;
            string name = WWWUtil.RES_BUNDLE_ORIGINAL_NAME ? mName : mRealName;

            if (ResourceModule.Instance.UseAssetBundleLoadFromFile && mWWWType == WWWType.AssetBundle)
            {
                abRequest = WWWUtil.CreateAssetbundleAsync(name, IsFromStream, IsFromWeb);
            }
            else
            {
                loadWWW = WWWUtil.CreateWWW(name, IsRawResource, IsFromStream, IsFromWeb);
            }
            mBeginLoadTime = 0;
        }
コード例 #24
0
        public void SetAssetReleasePriority(string name, int _Priority, UnityEngine.Object obj)
        {
            var bName = ResourceMgr.Instance().GetBundleName(name);
            BundleInfoResource b;

            if (cachedBundles.TryGetValue(bName, out b))
            {
                b.ReleasePriority = _Priority;
                if (obj != null)
                {
                    var asset = b[name];
                    if (asset != null)
                    {
                        asset.ReleaseAssetReference(obj);
                    }
                    else
                    {
                        UnityEngine.Object.Destroy(obj);
                    }
                }
            }
        }
コード例 #25
0
        public bool HasLoadedAsset(string asset)
        {
            var bName = ResourceMgr.Instance().GetBundleName(asset);
            BundleInfoResource b;

            if (cachedBundles.TryGetValue(bName, out b))
            {
                var a = b[asset];
                if (a != null)
                {
                    return(a.AssetValid || b.AssetBundle);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(addedAssets.ContainsKey(asset));
            }
        }
コード例 #26
0
        public void OnLoadAssetBundle(string name, AssetBundle bundle, bool dependencyResource, LoadPriority priority)
        {
#if DEBUG_BUNDLE_CACHE
            ResourceMgr.Instance().SampleLoadEvent(name, 4);
#endif
            AssetBundleAssetLoadingInfo info = new AssetBundleAssetLoadingInfo();
            info.AssetBundle = bundle;
            info.BundleName  = name;
            info.Priority    = priority;
            if (!dependencyResource)
            {
                EnqueuePendingAssetBunlde(info);
            }
            else
            {
                BundleInfoResource res = new BundleInfoResource();
                res.AssetBundle = info.AssetBundle;
                res.BundleInfo  = ResourceMgr.Instance().GetBundle(info.BundleName);
                cache.CacheAssetBundle(res);
                InvokeBundleLoaded(info);
                MarkBundleDependency(res);
            }
        }
コード例 #27
0
        internal void EnsureDependencies(string name)
        {
            string bundleName = ResourceMgr.GetBundleName(name);

            if (!string.IsNullOrEmpty(bundleName))
            {
                BundleInfo bundle = ResourceMgr.GetBundle(bundleName);
                if (bundle != null)
                {
                    foreach (var dep in bundle.DependsOn)
                    {
                        BundleInfo depBundle = ResourceMgr.GetBundle(dep);
                        if (depBundle == null)
                        {
                            continue;
                        }
                        if (!HasLoaded(depBundle.FirstAsset))
                        {
                            ResourceModule.Instance.PreloadBundle(dep, null);
                        }
                    }
                }
            }
        }
コード例 #28
0
 public override void Start()
 {
     resourceMgr = ResourceMgr.Instance();
     resourceMgr.Start();
 }
コード例 #29
0
        internal override void Update()
        {
            base.Update();
            if (mListRes.Count == 0)
            {
                return;
            }
            if (mDone)
            {
                Action endf = OnEnd;
                Clear();
                if (endf != null)
                {
                    endf();
                }
            }
            int downloadsize = 0;

            foreach (string name in mListRes)
            {
                BundleInfo bundle = ResourceMgr.Instance().GetBundle(name);
                if (bundle == null)
                {
                    continue;
                }

                if (this.IsBundleCached(name))
                {
                    downloadsize += bundle.Size;
                    UpdateProgress(name, 1f);
                }
                else
                {
                    Resource res = this.GetRes(name);
                    if (res != null)
                    {
                        float prog = res.Loader.Progress;
                        UpdateProgress(name, prog);
                        downloadsize += (int)((prog) * bundle.Size);
                    }
                    else
                    {
                        float prog;
                        if (progressMap.TryGetValue(name, out prog))
                        {
                            downloadsize += (int)((prog) * bundle.Size);
                        }
                    }
                }
            }
            if (mTotalSize == 0)
            {
                mProgerss = 0;
                mDone     = true;
            }
            else if (downloadsize == mTotalSize)
            {
                mProgerss = 1.0f;
                mDone     = true;
            }
            else
            {
                mProgerss = downloadsize * 1.0f / mTotalSize;
            }
            if (ProgressHandler != null)
            {
                ProgressHandler(mProgerss);
            }
        }
コード例 #30
0
 private bool IsBundleCached(string name)
 {
     return(ResourceMgr.Instance().IsBundleCached(name));
 }