public void ReleaseCache (UnityEngine.Object obj, CacheObject.DestroyDelegate destroyCallback) { if (obj == null) { Debug.LogError("Object you want to release is null!"); return; } ObjectType assetType = getAssetType(obj); if (assetType != ObjectType.None) { CachePool pool = null; cachePoolDic.TryGetValue(assetType, out pool); if (pool != null) { pool.Release(obj, destroyCallback); } else { Debug.LogError("Cache pool doesn't exist: " + assetType.ToString()); } } else { Debug.LogError("Unknown cache type: " + obj.ToString()); } }
public void Cache (UnityEngine.Object obj, float life) { CacheObject cache = null; assetDic.TryGetValue(obj.name, out cache); if (cache == null) { cache = new CacheObject(life); cache.id = obj.GetInstanceID(); cache.objName = obj.name; cache.obj = obj; cache.remainingLife = life; cache.referCount = 1; assetDic[cache.objName] = cache; indexDic[cache.id] = cache; } else { cache.referCount++; } }
public void Release (UnityEngine.Object obj, CacheObject.DestroyDelegate destroyCallback) { int id = obj.GetInstanceID(); CacheObject cache = null; indexDic.TryGetValue(id, out cache); if (cache != null) { cache.referCount--; cache.onDestroy = destroyCallback; if (cache.Life > 0 && cache.referCount <= 0) { recycleDic[cache.objName] = cache; assetDic.Remove(cache.objName); indexDic.Remove(cache.id); if (cache.obj is GameObject) { GameObject gameObject = cache.obj as GameObject; gameObject.SetActive(false); } } } }