/// <summary> /// 初始化对象池 /// </summary> /// <param name="poolName">对象池名字</param> /// <param name="poolObj">对象池对象</param> /// <param name="capacity">对象池容量</param> /// <param name="autoReleaseInterval">自动释放间隔秒数</param> /// <param name="expireTime">对象过期秒数</param> /// <returns></returns> public void Init(string poolName, PoolObject poolObj, int capacity, float autoReleaseInterval = 60f, float expireTime = 60f) { this.poolName = poolName; this.poolObj = poolObj; spawns = new List <PoolObject>(); desSpawns = new List <PoolObject>(); this.autoReleaseInterval = autoReleaseInterval; this.capacity = capacity; this.expireTime = expireTime; autoReleaseTime = 0f; //填池 for (int i = 0; i < capacity; i++) { Spawn(); } DesAllSpawn(); }
/// <summary> /// 回收对象 /// </summary> /// <param name="obj"></param> public bool DesSpawn(PoolObject obj, Action <PoolObject> action = null) { bool isDesSpawn = false; if (obj == null) { Debug.LogError("UnSpawn obj is null!"); return(isDesSpawn); } foreach (var po in spawns) { if (po == obj) { po.gameObject.SetActive(false); po.CancelInvoke(); po.inDesSpawnTime = Time.time; desSpawns.Add(obj); //检查是否超出数量 if (Count > capacity) { Release(); } if (action != null) { action.Invoke(obj); } isDesSpawn = true; return(isDesSpawn); } } return(isDesSpawn); }
private void Awake() { poolObject = GetComponent <PoolObject>(); sphereCollider = GetComponent <SphereCollider>(); sphereCollider.enabled = false; }
private void Start() { poolObject = GetComponent <PoolObject>(); }
private void Awake() { poolObject = GetComponent <PoolObject>(); }