public void AddObjectToPool(T go) { Count++; var record = new PoolRecord(go); _poolRecordList.Add(record); }
public void CreateClonePool(List <T> golist) { foreach (T t in golist) { Count++; var record = new PoolRecord((t)) { Instance = { Name = t.Name + "Clone" } }; _poolRecordList.Add(record); } }
public static void Prepare( Transform prefab, int amount ) { LinkedList<PrefabPoolItem> pool; PoolRecord poolRecord; if ( !poolCollection.TryGetValue( prefab, out pool ) ) { pool = poolCollection[ prefab ] = new LinkedList< PrefabPoolItem >(); poolRecord = poolableDict[ prefab ] = new PoolRecord(); for ( var i = 0; i < amount; i++ ) { var poolObject = SpawnNewPoolItem( prefab, null, null ); poolObject.gameObject.SetActive( false ); poolObject.PrefabReference = prefab; poolObject.IsInPool = true; poolRecord.CurrentAmount++; poolObject.gameObject.name = prefab.name + "_" + poolRecord.CurrentAmount; pool.AddLast( poolObject ); } } }
public static PrefabPoolItem Spawn( Transform prefab, Vector3? pos = null, Quaternion? rot = null ) { LinkedList< PrefabPoolItem > pool; if ( !poolCollection.TryGetValue( prefab, out pool ) ) { pool = poolCollection[ prefab ] = new LinkedList< PrefabPoolItem >(); poolableDict[ prefab ] = new PoolRecord(); } var poolItem = pool.Last; PrefabPoolItem poolObject; if ( poolItem != null ) { poolObject = poolItem.Value; pool.RemoveLast (); } else { var poolableRecord = poolableDict[ prefab ]; if ( poolableRecord.CurrentAmount >= poolableRecord.MaxAmount ) return null; poolObject = SpawnNewPoolItem( prefab, pos, rot ); poolObject.gameObject.SetActive( true ); poolObject.PrefabReference = prefab; poolableRecord.CurrentAmount++; poolObject.gameObject.name = prefab.name + "_" + poolableRecord.CurrentAmount; } if ( pos != null ) poolObject.gameObject.transform.position = pos.Value; if (rot != null ) poolObject.gameObject.transform.rotation = rot.Value; poolObject.IsInPool = false; poolObject.gameObject.SetActive( true ); spawnedObjects.AddLast(poolObject); return poolObject; }