示例#1
0
		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());
			}
		}
示例#2
0
		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++;
			}
		}
示例#3
0
		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);
					}
				}
			}
		}