Beispiel #1
0
        private void DestroyPoolItem(PoolItemBase poolItem)
        {
            if (!poolItem.Disposed)
            {
                poolItem.ReleaseResources();
                poolItem.Disposed = true;
                _counters.IncDestroyCount();
            }

            GC.SuppressFinalize(poolItem);
        }
Beispiel #2
0
    /// <summary>
    /// 创建池
    /// </summary>
    /// <param name="item"></param>
    public void CreateSubPool(PoolItemBase item)
    {
        //安全校验
        if (poolDict.ContainsKey(item.root.name))
        {
            Debug.LogError(item.root.name + "池已存在,检查是否重名或重复创建");
            return;
        }
        SubPool subPool = new SubPool(item);

        poolDict.Add(item.root.name, subPool);
    }
Beispiel #3
0
    public GameObject Spawn()
    {
        PoolItemBase obj = null;

        foreach (PoolItemBase item in objList)
        {
            if (!item.root.activeSelf)
            {
                obj = item;
                break;
            }
        }
        if (obj == null)
        {
            obj      = new PoolItemBase();
            obj.root = GameObject.Instantiate(prefab);
            objList.Add(obj);
        }
        obj.root.SetActive(true);
        obj.Spawn();
        return(obj.root);
    }
Beispiel #4
0
        private void ReturnItemToPool(PoolItemBase poolItem, bool reRegisterForFinalization)
        {
            if (poolItem.ShouldReturnToPool())
            {
                if (!poolItem.ResetState())
                {
                    _counters.IncResetFailCount();
                    DestroyPoolItem(poolItem);
                    return;
                }
                if (reRegisterForFinalization)
                {
                    GC.ReRegisterForFinalize(poolItem);
                }

                _counters.IncReturnCount();
                _resourcePool.Enqueue((T)poolItem);
            }
            else
            {
                _counters.IncDoNotReturnCount();
                DestroyPoolItem(poolItem);
            }
        }
Beispiel #5
0
 public SubPool(PoolItemBase poolItem)
 {
     this.prefab = poolItem.root;
 }