Example #1
0
        /// <summary>
        ///  得到游戏对象,从缓冲池中(“多模”集合)
        ///
        ///  功能描述:
        ///     1: 对指定“预设”在自己的缓冲池中激活一个,且加入自己缓冲池中的"可用激活池"。
        ///     2: 然后再建立一个池对象,且激活预设,再加入自己的缓冲池中的“可用激活池”中。
        /// </summary>
        /// <param name="prefab"></param>
        /// <param name="pos"></param>
        /// <param name="rot"></param>
        /// <returns></returns>
        public GameObject GetGameObjectByPool(GameObject prefab, Vector3 pos, Quaternion rot)
        {
            GameObject obj = null;

            //循环体为定义的“种类”数量
            for (int i = 0; i < PoolOptionArrayLib.Count; i++)
            {
                PoolOption opt = this.PoolOptionArrayLib[i];
                if (opt.Prefab == prefab)
                {
                    //激活指定“预设”
                    obj = opt.Active(pos, rot);
                    if (obj == null)
                    {
                        return(null);
                    }

                    //所有激活的游戏对象必须是本类所挂空对象的子对象。
                    if (obj.transform.parent != ThisGameObjectPosition)
                    {
                        obj.transform.parent = ThisGameObjectPosition;
                    }
                }
            }//for_end

            return(obj);
        }//BirthGameObject_end
Example #2
0
 /// <summary>
 ///
 /// 时间戳处理
 /// 主要业务逻辑:
 /// 1>: 每间隔10秒种,对所有正在使用的活动状态游戏对象的时间戳减去10秒。
 /// 2>:  检查每个活动状态的游戏对象名称的时间戳如果小于等于0,则进入禁用状态。
 /// 3>:  重新进入活动状态的游戏对象,获得预先设定的存活时间写入对象名称的时间戳中。
 /// </summary>
 /// <param name="parent">回收后的挂在对象</param>
 void ProecessGo_NameTime()
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption po = poolOptionList[i];
         po.AllActiveGameObjectTimeSubtraction(gosOnPos);
     }
 }
Example #3
0
 /// <summary>
 /// 销毁未使用对象
 /// </summary>
 public void DestoryDisused()
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption opt = poolOptionList[i];
         opt.DestoryAllDeactiveObj();
     }
 }
Example #4
0
 /// <summary>
 /// 销毁无用的对象(“多模”集合)
 /// </summary>
 public void DestoryUnused()
 {
     for (int i = 0; i < this.PoolOptionArrayLib.Count; i++)
     {
         PoolOption opt = this.PoolOptionArrayLib[i];
         opt.ClearUpUnused();
     }
 }
Example #5
0
 /// <summary>
 /// 时间戳处理
 /// 主要业务逻辑:
 /// 1>: 每间隔10秒种,对所有正在使用的活动状态游戏对象的时间戳减去10秒。
 /// 2>:  检查每个活动状态的游戏对象名称的时间戳如果小于等于0,则进入禁用状态。
 /// 3>:  重新进入活动状态的游戏对象,获得预先设定的存活时间写入对象名称的时间戳中。
 /// </summary>
 void ProcessGameObject_NameTime()
 {
     //循环体为定义的“种类”数量
     for (int i = 0; i < PoolOptionArrayLib.Count; i++)
     {
         PoolOption opt = this.PoolOptionArrayLib[i];
         //所有正在使用的活动状态游戏对象的时间戳减去10秒
         //检查每个活动状态的游戏对象名称的时间戳如果小于等于0,则进入禁用状态
         opt.AllActiveGameObjectTimeSubtraction();
     }//for_end
 }
Example #6
0
 /// <summary>
 /// 预设加载
 /// </summary>
 public void PrefabLoadGo()
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption po = poolOptionList[i];
         for (int j = po.totalCount(); j < po.numCacheCapcity; j++)//最开始的时候totalCount()为0
         {
             GameObject obj = po.PrefabLoad(po.prefab, Vector3.zero, Quaternion.identity);
             obj.transform.parent = gosOnPos;
         }
     }
 }
Example #7
0
 /// <summary>
 /// 销毁池子里的某个物体
 /// </summary>
 /// <param name="obj"></param>
 public void DestoryParticalCloneObj(GameObject obj)
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption opt = poolOptionList[i];
         if (obj.name.Contains(poolOptionList[i].prefab.name))//同一个预设
         {
             opt.DestroyParticlActiveObj(obj);
             return;
         }
     }
 }
Example #8
0
 /// <summary>
 /// 停止时间戳
 /// </summary>
 public void OnDestory()
 {
     if (isUsedTime)
     {
         CancelInvoke("ProecessGo_NameTime");
     }
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption opt = poolOptionList[i];
         opt.ResetPool();
     }
 }
Example #9
0
 /// <summary>
 /// 销毁指定数量的模型
 /// </summary>
 /// <param name="prefab"></param>
 /// <param name="count"></param>
 public void DestoryParticalPrefab(GameObject prefab, int count)
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption opt = poolOptionList[i];
         if (prefab == poolOptionList[i].prefab)
         {
             opt.DestroyParticlDeactiveObj(count);
             return;
         }
     }
 }
Example #10
0
 /// <summary>
 /// 销毁指定数量的游戏对象
 /// </summary>
 /// <param name="prefab"></param>
 /// <param name="count"></param>
 public void DestoryPrefabCount(GameObject prefab, int count)
 {
     for (int i = 0; i < this.PoolOptionArrayLib.Count; i++)
     {
         PoolOption opt = this.PoolOptionArrayLib[i];
         if (opt.Prefab == prefab)
         {
             opt.DestoryCount(count);
             return;
         }
     }
 }
Example #11
0
 /// <summary>
 /// 预加载
 /// </summary>
 public void PreLoadGameObject()
 {
     for (int i = 0; i < this.PoolOptionArrayLib.Count; i++)
     {                                                //“多模”集合
         PoolOption opt = this.PoolOptionArrayLib[i]; //“单模”集合
         for (int j = opt.totalCount; j < opt.IntPreLoadNumber; j++)
         {
             GameObject obj = opt.PreLoad(opt.Prefab, Vector3.zero, Quaternion.identity);
             //所有预加载的游戏对象规定为Pool类所挂游戏对象的子对象。
             obj.transform.parent = ThisGameObjectPosition;
         }
     }
 }
Example #12
0
 /// <summary>
 /// 当本脚本所挂载的游戏对象销毁时候,清空所有集合内全部数据
 /// </summary>
 public void OnDestroy()
 {
     //停止时间戳的检查
     if (IsUsedTime)
     {
         CancelInvoke("ProcessGameObject_NameTime");
     }
     for (int i = 0; i < this.PoolOptionArrayLib.Count; i++)
     {
         PoolOption opt = this.PoolOptionArrayLib[i];
         opt.ClearAllArray();
     }
 }
Example #13
0
 /// <summary>
 /// 将激活状态的物体回收到池子的非激活集合内
 /// </summary>
 /// <param name="go"></param>
 public void RecoverGameObjectToPools(GameObject go)
 {
     for (int i = 0; i < poolOptionList.Count; i++)
     {
         PoolOption opt = poolOptionList[i];
         //检查自己的每一类“池”中是否包含指定的“预设”对象。
         if (opt.activeGosList.Contains(go))
         {
             if (go.transform.parent != gosOnPos)
             {
                 go.transform.parent = gosOnPos;
             }
             //特定“池”回收这个指定的对象。
             opt.ObjDeactive(go);
         }
     }
 }
Example #14
0
        }//BirthGameObject_end

        /// <summary>
        /// 收回游戏对象(“多模”集合)
        /// </summary>
        /// <param name="instance"></param>
        public void RecoverGameObjectToPools(GameObject instance)
        {
            for (int i = 0; i < this.PoolOptionArrayLib.Count; i++)
            {
                PoolOption opt = this.PoolOptionArrayLib[i];
                //检查自己的每一类“池”中是否包含指定的“预设”对象。
                if (opt.ActiveGameObjectArray.Contains(instance))
                {
                    if (instance.transform.parent != ThisGameObjectPosition)
                    {
                        instance.transform.parent = ThisGameObjectPosition;
                    }
                    //特定“池”回收这个指定的对象。
                    opt.Deactive(instance);
                }
            }
        }
Example #15
0
        /// <summary>
        /// 从缓冲池中获取与当前需求预设相同的物体
        /// 功能描述:
        /// 1: 对指定“预设”在自己的缓冲池中激活一个,且加入自己缓冲池中的"可用激活池"。
        /// 2: 然后再建立一个池对象,且激活预设,再加入自己的缓冲池中的“可用激活池”中。
        /// </summary>
        /// <param name="prefab">需求的预设体</param>
        /// <param name="pos"></param>
        /// <param name="rot"></param>
        /// <returns></returns>
        public GameObject GetGameObjectByPools(GameObject prefab, Vector3 pos, Quaternion rot)
        {
            GameObject obj = null;

            for (int i = 0; i < poolOptionList.Count; i++)
            {
                PoolOption po = poolOptionList[i];
                if (prefab == po.prefab)
                {
                    obj = po.ObjActive(pos, rot);
                    if (obj == null)
                    {
                        return(null);
                    }
                    //所有激活的游戏对象必须是本类所挂空对象的子对象。
                    if (obj.transform.parent != gosOnPos)
                    {
                        obj.transform.parent = gosOnPos;
                    }
                }
            }
            return(obj);
        }