本文记录对PoolManager使用中的常见问题优化方案
由于最近项目中游戏场景原因,部分对象池里资源是永久不用的。
这种情况也很常见,比如玩家过大关后,之前的关卡物体就全都用不到了,那就没必要继续占用内存,从对象池里完全释放掉。
那么就不仅需要Despawn(),,还需要个类似Destroy接口,来销毁不再使用的资源
下面就是提供这样功能的接口
代码加在 SpawnPool.cs DespawnAll()后面即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/// <description> /// Despawns all active instances in this SpawnPool /// </description> public void DespawnAll() { var spawned = new List<Transform>(this._spawned); for (int i = 0; i < spawned.Count; i++) this.Despawn(spawned[i]); } /// <summary> /// 销毁指定池内已释放的资源 /// </summary> public void DestroyDespawned(PrefabPool prefabPool) { if (prefabPool != null) { for (int j = 0; j < prefabPool._despawned.Count; j++) Destroy(prefabPool._despawned[j].gameObject); prefabPool._despawned.Clear(); } } /// <summary> /// 销毁所有已释放的资源 /// </summary> public void DestroyAllDespawned() { for (int i = 0; i < this._prefabPools.Count; i++) { for (int j = 0; j < this._prefabPools[i]._despawned.Count; j++) Destroy(this._prefabPools[i]._despawned[j].gameObject); this._prefabPools[i]._despawned.Clear(); } } |
- 本文固定链接: http://www.u3d8.com/?p=1910
- 转载请注明: 网虫虫 在 u3d8.com 发表过