public static void CreatePool(GameObject prefab, int initialPoolSize, string pathOrAddress) { if (prefab != null && !instance.pooledObjects.ContainsKey(prefab)) { if (!instance.ObjectAndPathDic.ContainsKey(prefab)) { instance.ObjectAndPathDic.Add(prefab, pathOrAddress); } var list = new List <GameObject>(); instance.pooledObjects.Add(prefab, list); if (initialPoolSize > 0) { bool active = prefab.activeSelf; prefab.SetActive(false); Transform parent = instance.transform; while (list.Count < initialPoolSize) { GameObject obj = null; string path = string.Empty; instance.ObjectAndPathDic.TryGetValue(prefab, out path); if (string.IsNullOrEmpty(path)) { obj = Instantiate(prefab); } else { obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab); } obj.transform.SetParent(parent, false); list.Add(obj); } prefab.SetActive(active); } } }
public static GameObject Spawn(GameObject prefab, Transform parent, Vector3 position, Quaternion rotation) { List <GameObject> list; Transform trans; GameObject obj; if (instance.pooledObjects.TryGetValue(prefab, out list)) { obj = null; if (list.Count > 0) { while (obj == null && list.Count > 0) { obj = list[0]; list.RemoveAt(0); } if (obj != null) { trans = obj.transform; trans.SetParent(parent, false); trans.localPosition = position; trans.localRotation = rotation; obj.SetActive(true); instance.spawnedObjects.Add(obj, prefab); return(obj); } } string path = string.Empty; instance.ObjectAndPathDic.TryGetValue(prefab, out path); if (string.IsNullOrEmpty(path)) { obj = Instantiate(prefab); } else { obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab); } trans = obj.transform; trans.SetParent(parent, false); trans.localPosition = position; trans.localRotation = rotation; instance.spawnedObjects.Add(obj, prefab); return(obj); } else { string path = string.Empty; instance.ObjectAndPathDic.TryGetValue(prefab, out path); if (string.IsNullOrEmpty(path)) { CreatePool(prefab, 0, string.Empty); obj = Instantiate(prefab); } else { CreatePool(prefab, 0, path); obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab); } trans = obj.transform; trans.SetParent(parent, false); trans.localPosition = position; trans.localRotation = rotation; instance.spawnedObjects.Add(obj, prefab); return(obj); //obj = Instantiate(prefab); //trans = obj.GetComponent<Transform>(); //trans.SetParent(parent); //trans.localPosition = position; //trans.localRotation = rotation; //return obj; } }