public virtual void UnloadResource(AsyncResourceRequester requester) { if (requester.done && !requester.fail && !requester.released) { requester.resourceHolder.Release(); } else { CollectionUtil.RemoveFromTable(requester.resourceName, requester, requestCacheTable); } requester.released = true; requester.resourceHolder = null; requester.resourceHolderGenerateCallback = null; requester.callbackExtraParam = null; if (requestPool == null) { requestPool = new Queue <AsyncResourceRequester>(); } requestPool.Enqueue(requester); }
/// <summary> /// 处理异步加载携程执行完毕后加载上来的资源实例,将其放入资源表,为其生成ResourceHolder,并处理为该资源缓存的加载请求 /// </summary> /// <param name="assetName">资源名</param> /// <param name="assetLoaded">资源实例</param> protected void ProcessLoadedAsset(string assetName, object assetLoaded) { if (resourceTable == null) { resourceTable = new Dictionary <string, ResourceHolder>(); } ResourceHolder resourceHolder = new ResourceHolder(assetName, assetLoaded, UnloadResource); resourceTable[assetName] = resourceHolder; // 处理缓存的资源请求,给资源增加对应的引用计数,并逐次调用资源加载成功回调 List <AsyncResourceRequester> tmpCacheList = null; if (requestCacheTable != null) { requestCacheTable.TryGetValue(assetName, out tmpCacheList); } if (tmpCacheList != null) { IncreaseResourceReferenceCount(assetName, tmpCacheList.Count); for (int i = 0; i < tmpCacheList.Count; ++i) { AsyncResourceRequester requester = tmpCacheList[i]; requester.progress = 1f; requester.done = true; requester.resourceHolder = resourceHolder; if (requester.resourceHolderGenerateCallback != null) { requester.resourceHolderGenerateCallback(requester, requester.callbackExtraParam); } } requestCacheTable.Remove(assetName); } else { if (LogUtil.ShowError != null) { LogUtil.ShowError(string.Format("加载的资源[{0}]找不到请求者,只能释放掉", assetName)); } UnloadResource(resourceHolder); } }
public void ReleaseResource(AsyncResourceRequester resourceRequester) { if (resourceRequester == null) { return; } EResourceType resourceType; if (requesterTable != null && requesterTable.TryGetValue(resourceRequester, out resourceType)) { IResourceLoader loader = null; if (resourceLoaderTable.TryGetValue(resourceType, out loader)) { loader.UnloadResource(resourceRequester); requesterTable.Remove(resourceRequester); } } else { Debug.LogWarning("无法找到这个请求器的记录 " + resourceRequester.resourceName); } }
public override void UnloadResource(AsyncResourceRequester requester) { Debug.Log(string.Format("请求释放其他角色资源[{0}]", requester.resourceName)); base.UnloadResource(requester); }