public override void OnInspectorGUI() { _ObjectPooler = (ObjectPooler)target; EditorUtility.SetDirty(_ObjectPooler); _ObjectPooler.defaultCount = EditorGUILayout.IntField("Default Buffer Amount", _ObjectPooler.defaultCount); EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("GO"); GUILayout.FlexibleSpace(); EditorGUILayout.LabelField("Buffer Amount"); GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); for (int i = 0; i < _ObjectPooler.Prefabs.Count; i++) { EditorGUILayout.BeginHorizontal("box"); _ObjectPooler.Prefabs[i].GO = (GameObject)EditorGUILayout.ObjectField(_ObjectPooler.Prefabs[i].GO, typeof(GameObject), false); _ObjectPooler.Prefabs[i].instanceCount = EditorGUILayout.IntField(_ObjectPooler.Prefabs[i].instanceCount); if (GUILayout.Button("X")) { _ObjectPooler.Prefabs.RemoveAt(i); } EditorGUILayout.EndHorizontal(); } if (GUILayout.Button("Add Prefabs")) { ObjectPoolInfo info = new ObjectPoolInfo(); info.instanceCount = _ObjectPooler.defaultCount; _ObjectPooler.Prefabs.Add(info); } }
void FillObjectPoolList(ObjectPoolInfo objectPoolInfo, ref List <GameObject> objectPoolList, int count) { for (int i = 0; i < objectPoolInfo.count; i++) { objectPoolList.Add(Spawn(objectPoolInfo.prefab, objectPoolContainer)); objectPoolList[i].SetActive(false); } }
public void AddToPool(GameObject instance, ObjectPoolType type) { instance.SetActive(false); ObjectPoolInfo poolInfo = allPools.Find(pool => pool.type.Equals(type)); poolInfo.pool.Enqueue(instance); }
public GameObject GetFromPool(ObjectPoolType type) { ObjectPoolInfo poolInfo = allPools.Find(p => p.type.Equals(type)); Queue <GameObject> pool = poolInfo.pool; if (poolInfo.canGrow && pool.Count == 0) { GrowPool(poolInfo); } GameObject instance = pool.Dequeue(); instance.SetActive(true); return(instance); }
private void GrowPool(ObjectPoolInfo poolInfo) { int poolSize = poolInfo.poolSize; GameObject prefab = poolInfo.prefab; GameObject container = poolInfo.container; Queue <GameObject> pool = poolInfo.pool; for (int i = 0; i < poolSize; i++) { GameObject instance = Instantiate(prefab, container.transform); instance.SetActive(false); pool.Enqueue(instance); } }
private void Start() { DontDestroyOnLoad(gameObject); for (int i = 0; i < Prefabs.Count; i++) { if (Prefabs[i].instanceCount > 0) { ObjectPoolInfo obj = new ObjectPoolInfo(); for (int j = 0; j < Prefabs[i].instanceCount; j++) { GameObject go = Instantiate(Prefabs[i].GO); go.name = Prefabs[i].GO.name; obj.GO_Instances.Add(go); obj.GO = go; obj.instanceCount = Prefabs[i].instanceCount; go.transform.SetParent(transform); go.SetActive(false); } PooledObjects.Add(obj); } else { ObjectPoolInfo obj = new ObjectPoolInfo(); for (int j = 0; j < defaultCount; j++) { GameObject go = Instantiate(Prefabs[i].GO); go.name = Prefabs[i].GO.name; obj.GO_Instances.Add(go); obj.GO = go; obj.instanceCount = defaultCount; go.transform.SetParent(transform); go.SetActive(false); } PooledObjects.Add(obj); } } }