Exemple #1
0
 static int DestroyResource(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 1);
         Launch.Resource obj = (Launch.Resource)ToLua.CheckObject(L, 1, typeof(Launch.Resource));
         obj.DestroyResource();
         return(0);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
 private void OnResourceDone(Resource res)
 {
     if (res.isSucc)
     {
         List <ResourceHandler> succList;
         _succCallbacks.TryGetValue(res, out succList);
         _succCallbacks.Remove(res);
         if (succList != null)
         {
             for (int i = 0; i < succList.Count; i++)
             {
                 succList[i].Invoke(res);
             }
             succList.Clear();
         }
         res.Release();
     }
     else
     {
         //失败的话,将资源先移除掉
         if (res.refCount > 1)
         {
             CLog.LogError("DestroyResource[resPath=" + res.path + "],RefCount>1.");
         }
         else
         {
             _mapRes.Remove(GetCacheResourceKey(res.path));
         }
         List <ResourceHandler> failList;
         _failCallbacks.TryGetValue(res, out failList);
         _failCallbacks.Remove(res);
         if (failList != null)
         {
             for (int i = 0; i < failList.Count; i++)
             {
                 failList[i].Invoke(res);
             }
             failList.Clear();
         }
         res.Release();
         if (res.refCount <= 0)
         {
             res.DestroyResource();
         }
     }
 }
        public void ReleaseUnUseRes()
        {
            List <string> keyList = new List <string>();

            foreach (var item in _mapRes)
            {
                if (item.Value.refCount <= 0)
                {
                    keyList.Add(item.Key);
                }
            }
            for (int i = 0; i < keyList.Count; i++)
            {
                Resource res = _mapRes[keyList[i]];
                RemoveAllListener(res);
                _mapRes.Remove(keyList[i]);
                res.DestroyResource();
            }
            Resources.UnloadUnusedAssets();
            GC.Collect();
        }