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);
        }
    }
Beispiel #4
0
 public override void UnloadResource(AsyncResourceRequester requester)
 {
     Debug.Log(string.Format("请求释放其他角色资源[{0}]", requester.resourceName));
     base.UnloadResource(requester);
 }