/// <summary> /// Provide an available object. If no objects are present in the pool, a new object is created and returned. /// </summary> /// <param name="isForceCreate">always create new object</param> public GameObject Use(string path, bool isForceCreate = false) { if (mDictPooler.ContainsKey(path)) { if (isForceCreate) { return(mDictPooler[path].Create()); } return(mDictPooler[path].Use()); } GameObject root = MyUtilities.FindObjectInFirstLayer(gameObject, path); if (root == null) { root = new GameObject(path); root.transform.SetParent(transform, false); } GameObject rootFree = MyUtilities.FindObjectInFirstLayer(root, "Free"); if (rootFree == null) { rootFree = new GameObject("Free"); rootFree.transform.SetParent(root.transform, false); } GameObject rootOccupied = MyUtilities.FindObjectInFirstLayer(root, "Occupied"); if (rootOccupied == null) { rootOccupied = new GameObject("Occupied"); rootOccupied.transform.SetParent(root.transform, false); } mDictPooler.Add(path, new MyPool(path, rootFree, rootOccupied)); return(Use(path, isForceCreate)); }
/// <summary> /// Provide an available object. If no objects are present in the pool, a new object is created and returned. /// </summary> public GameObject Use(GameObject prefab) { if (mDictPooler.ContainsKey(prefab.name)) { mDictPooler[prefab.name].SetTemplate(prefab); return(mDictPooler[prefab.name].Use()); } GameObject root = MyUtilities.FindObjectInFirstLayer(gameObject, prefab.name); if (root == null) { root = new GameObject(prefab.name); root.transform.SetParent(transform, false); } GameObject rootFree = MyUtilities.FindObjectInFirstLayer(root, "Free"); if (rootFree == null) { rootFree = new GameObject("Free"); rootFree.transform.SetParent(root.transform, false); } GameObject rootOccupied = MyUtilities.FindObjectInFirstLayer(root, "Occupied"); if (rootOccupied == null) { rootOccupied = new GameObject("Occupied"); rootOccupied.transform.SetParent(root.transform, false); } mDictPooler.Add(prefab.name, new MyPool(prefab.name, rootFree, rootOccupied)); mDictPooler[prefab.name].SetTemplate(prefab); return(Use(prefab.name, false)); }