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; }
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); } }
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); }
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);*/ }
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); } }
public static ResourceMgr Instance() { if (resourceMgr == null) { resourceMgr = new ResourceMgr(); } return(resourceMgr); }
public override void Start() { resourceMgr = ResourceMgr.Instance; resourceMgr.Start(); UseAssetBundleLoadFromFile = true; RegisterInternelEvents(); }
internal void AddAsset(string name) { string bundleName = ResourceMgr.Instance().GetBundleName(name); if (bundleName != string.Empty) { this.AddBundle(bundleName, name); } }
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); }
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); }
public void LoadRes() { if (mResLoader.State == LoaderState.None) { if (!DependencyResource) { mResLoader.IsRawResource = true; } mResLoader.Name = mName; ResourceMgr.Instance().GOELoaderMgr.AddLoader(mResLoader); } }
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); }
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); }
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); }
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); }
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++; } }
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); } } }
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 ); } } }
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); } } }
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); }
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; } } }
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" ); } }
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; }
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); } } } }
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)); } }
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); } }
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); } } } } }
public override void Start() { resourceMgr = ResourceMgr.Instance(); resourceMgr.Start(); }
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); } }
private bool IsBundleCached(string name) { return(ResourceMgr.Instance().IsBundleCached(name)); }