Exemplo n.º 1
0
    public void DisposeTransform(Transform transform, bool forceDestroy)
    {
        IzPoolObject izPoolObject = transform.GetComponent <PoolObject>();

        if (izPoolObject != null)
        {
            if (forceDestroy)//强制清除,从字典中去掉,并且destroy
            {
                RemoveFromSpawnedDic(izPoolObject);
                RemoveFromDespawnedDic(izPoolObject);

                UnityEngine.Object.Destroy(transform.gameObject);
                //UnityEngine.Object.DestroyImmediate(transform.gameObject);
            }
            else
            {
                AddToDespawnedDic(izPoolObject);
                RemoveFromSpawnedDic(izPoolObject);
            }
        }
        else
        {
            Debug.LogFormat(">>>>该obj {0} 尚未没存到对象池中,无法回收,并将直接删除! ", transform.name);
            UnityEngine.Object.Destroy(transform.gameObject);
            //UnityEngine.Object.DestroyImmediate(transform.gameObject);
        }
    }
Exemplo n.º 2
0
    public Transform GetTransform(string strPathName)
    {
        Transform        transform = null;
        List <Transform> list      = null;

        if (this._dicDespawned.TryGetValue(strPathName, out list) && list.Count > 0)
        {
            transform = list[0];
        }

        if (transform == null)
        {
            transform = this._izPoolManager.GetPoolFactory().CreatePrefab(strPathName);
        }
        if (null == transform)
        {
            return(null);
        }
        IzPoolObject izPoolObject = transform.GetComponent <PoolObject>();

        if (izPoolObject == null)
        {
            izPoolObject = transform.gameObject.AddComponent <PoolObject>();
        }
        izPoolObject.SetPoolName(this._strPoolName);
        izPoolObject.SetPathName(strPathName);
        AddToSpawnedDic(izPoolObject);
        RemoveFromDespawnedDic(izPoolObject);
        return(transform);
    }
Exemplo n.º 3
0
 private void RemoveFromSpawnedDic(IzPoolObject izPoolObject)
 {
     if (izPoolObject != null && this._strPoolName == izPoolObject.GetPoolName())
     {
         string           strPathName = izPoolObject.GetPathName();
         List <Transform> list        = null;
         if (this._dicSpawned.TryGetValue(strPathName, out list) && list != null)
         {
             list.Remove(izPoolObject.GetTransform());
             this._dicSpawned[strPathName] = list;
         }
     }
 }
Exemplo n.º 4
0
    public void DisposeTransform(Transform transform, bool forceDestroy)
    {
        IzPoolObject izPoolObject = transform.GetComponent <PoolObject>();       //TODO Denes 这里可以尝试优化
        IzSpawnPool  izSpawnPool  = null;

        if (izPoolObject != null && this._dicSpawnPool.TryGetValue(izPoolObject.GetPoolName(), out izSpawnPool) && izSpawnPool != null)
        {
            izSpawnPool.DisposeTransform(transform, forceDestroy);
        }
        else
        {
            UnityEngine.Object.Destroy(transform.gameObject);//不在池里的对象,直接destroy
        }
    }
Exemplo n.º 5
0
 private void AddToSpawnedDic(IzPoolObject izPoolObject)
 {
     if (izPoolObject != null && this._strPoolName == izPoolObject.GetPoolName())
     {
         string           strPathName = izPoolObject.GetPathName();
         List <Transform> list        = null;
         if (!this._dicSpawned.TryGetValue(strPathName, out list) || list == null)
         {
             list = new List <Transform>();
         }
         list.Add(izPoolObject.GetTransform());
         this._dicSpawned[strPathName] = list;
     }
 }