private void Awake() { prefabs = TileDatabase.sharedInstance.databaseList.tileDatabase.ToArray(); foreach (GameObject _prefab in prefabs) { if (_prefab == null) { Debug.LogError("Null prefab in PoolPreparer"); } else { PooledMonobehaviour _poolablePrefab = _prefab.GetComponent <PooledMonobehaviour>(); if (_poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled"); } else { Pool.GetPool(_poolablePrefab); } } } }
private void OnValidate() { List <GameObject> prefabsToRemove = new List <GameObject>(); foreach (var prefab in prefabs.Where(t => t != null)) { //PrefabUtility.GetPrefabAssetType(prefab) != PrefabAssetType.Regular if (PrefabUtility.GetPrefabType(prefab) != PrefabType.Prefab) { Debug.LogError(string.Format("{0} is not a prefab. It has been removed.", prefab.gameObject.name)); prefabsToRemove.Add(prefab.gameObject); } PooledMonobehaviour poolablePrefab = prefab.GetComponent <PooledMonobehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled. It has been removed."); prefabsToRemove.Add(prefab.gameObject); } } prefabs = prefabs .Where(t => t != null && prefabsToRemove.Contains(t.gameObject) == false) .ToArray(); }
public T Get <T>() where T : PooledMonobehaviour { MakeDisabledObjectsChildren(); if (m_Objects.Count == 0) { GrowPool(); } PooledMonobehaviour _pooledObject = m_Objects.Dequeue(); return(_pooledObject as T); }
public void GrowPool() { for (int i = 0; i < m_Prefab.m_InitialPoolSize; i++) { PooledMonobehaviour _pooledObject = Instantiate(this.m_Prefab) as PooledMonobehaviour; (_pooledObject as Component).gameObject.name += " " + totalPooledObjects++; _pooledObject.OnDestroyEvent += () => AddObjectToAvalaible(_pooledObject); (_pooledObject as Component).gameObject.SetActive(false); } }
public static Pool GetPool(PooledMonobehaviour prefab) { if (pools.ContainsKey(prefab)) { return(pools[prefab]); } var pool = new GameObject("Pool-" + (prefab as Component).name).AddComponent <Pool>(); pool.prefab = prefab; pool.GrowPool(); pools.Add(prefab, pool); return(pool); }
public static Pool GetPool(PooledMonobehaviour prefab) { if (m_Pools.ContainsKey(prefab)) { return(m_Pools[prefab]); } Pool _pool = new GameObject("Pool-" + (prefab as Component).name).AddComponent <Pool>(); _pool.m_Prefab = prefab; _pool.GrowPool(); _pool.transform.parent = GameObject.Find("Pool").transform; m_Pools.Add(prefab, _pool); return(_pool); }
private void OnValidate() { #if UNITY_EDITOR List <GameObject> prefabsToRemove = new List <GameObject>(); if (prefabs != null) { foreach (var prefab in prefabs.Where(t => t != null)) { if (PrefabUtility.GetPrefabAssetType(prefab) != PrefabAssetType.Regular) //change { Debug.LogError(string.Format("{0} is not a prefab. It has been removed.", prefab.gameObject.name)); prefabsToRemove.Add(prefab.gameObject); } PooledMonobehaviour poolablePrefab = prefab.GetComponent <PooledMonobehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled. It has been removed."); prefabsToRemove.Add(prefab.gameObject); } } List <PooledMonobehaviour> newPrefabs = new List <PooledMonobehaviour>(); for (int i = 0; i < prefabs.Length; i++) { if (prefabs[i] != null) { if (!prefabsToRemove.Contains(prefabs[i].gameObject)) { newPrefabs.Add(prefabs[i]); } } else { newPrefabs.Add(prefabs[i]); } } prefabs = newPrefabs.ToArray(); } #endif }
private void Awake() { foreach (var prefab in prefabs) { if (prefab == null) { Debug.LogError("Null prefab in PoolPreparer"); } else { PooledMonobehaviour poolablePrefab = prefab.GetComponent <PooledMonobehaviour>(); if (poolablePrefab == null) { Debug.LogError("Prefab does not contain an IPoolable and can't be pooled"); } else { Pool.GetPool(poolablePrefab).GrowPool(); } } } }
private void AddObjectToAvailable(PooledMonobehaviour pooledObject) { disabledObjects.Add(pooledObject); objects.Enqueue(pooledObject); }
public void AddObjectToAvalaible(PooledMonobehaviour pooledObject) { m_DisabledObjects.Add(pooledObject); m_Objects.Enqueue(pooledObject); }