/// <summary> /// 得到游戏对象(“多模”集合) /// /// 功能描述: /// 1: 对指定“预设”在自己的缓冲池中激活一个,且加入自己缓冲池中的"可用激活池"。 /// 2: 然后再建立一个池对象,且激活预设,再加入自己的缓冲池中的“可用激活池”中。 /// </summary> /// <param name="prefab"></param> /// <param name="pos"></param> /// <param name="rot"></param> /// <returns></returns> public GameObject GetGameObject(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
/// <summary> /// 销毁无用的对象(“多模”集合) /// </summary> public void DestoryUnused() { for (int i = 0; i < this.PoolOptionArrayLib.Count; i++) { PoolOption opt = this.PoolOptionArrayLib[i]; opt.ClearUpUnused(); } }
/// <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 }
/// <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; } } }
/// <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; } } }
/// <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(); } }
} //BirthGameObject_end /// <summary> /// 收回游戏对象(“多模”集合) /// </summary> /// <param name="instance"></param> public void RecoverGameObject(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); } } }