public GameObject Create(string path) { var key = CRC32.GetHashForAnsi(path); if (objectPool.ContainsKey(key) == false) { objectPool.Add(key, new Queue <GameObject>()); } GameObject obj = null; if (0 < objectPool[key].Count) { obj = objectPool[key].Dequeue(); } if (obj == null) { obj = CreateObject(path); CustomGameObject customObject = obj.GetComponent <CustomGameObject>(); if (customObject == null) { customObject = obj.AddComponent <CustomGameObject>(); } customObject.hashKey = key; } obj.SetActive(true); return(obj); }
public void DestroyImmediate(GameObject obj) { if (null == obj) { return; } CustomGameObject customObject = obj.GetComponent <CustomGameObject>(); if (customObject == null) { GameObject.Destroy(obj); return; } if (objectPool.ContainsKey(customObject.hashKey) == false) { GameObject.Destroy(obj); return; } obj.SetActive(false); objectPool[customObject.hashKey].Enqueue(obj); }
private List <CustomGameObject> CheckForAdjacentObjects(GameObject obj, List <CustomGameObject> matchingObjectsList) { var go = new CustomGameObject { GameObject = obj, IsChecked = true }; go.GameObject.GetComponent <Collider2D>().enabled = false; RaycastHit2D downHit = Physics2D.Raycast(obj.transform.position, -Vector2.up); RaycastHit2D upHit = Physics2D.Raycast(obj.transform.position, Vector2.up); RaycastHit2D rightHit = Physics2D.Raycast(obj.transform.position, Vector2.right); RaycastHit2D leftHit = Physics2D.Raycast(obj.transform.position, -Vector2.right); obj.GetComponent <Collider2D>().enabled = true; if (!matchingObjectsList.Contains(go)) { matchingObjectsList.Add(go); } if (downHit.collider != null && obj.tag == downHit.collider.tag && downHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == downHit.collider.gameObject)) { matchingObjectsList.Add(new CustomGameObject { GameObject = downHit.collider.gameObject, IsChecked = false }); } if (upHit.collider != null && obj.tag == upHit.collider.tag && upHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == upHit.collider.gameObject)) { matchingObjectsList.Add(new CustomGameObject { GameObject = upHit.collider.gameObject, IsChecked = false }); } if (rightHit.collider != null && obj.tag == rightHit.collider.tag && rightHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == rightHit.collider.gameObject)) { matchingObjectsList.Add(new CustomGameObject { GameObject = rightHit.collider.gameObject, IsChecked = false }); } if (leftHit.collider != null && obj.tag == leftHit.collider.tag && leftHit.collider.gameObject != obj && !matchingObjectsList.Any(x => x.GameObject == leftHit.collider.gameObject)) { matchingObjectsList.Add(new CustomGameObject { GameObject = leftHit.collider.gameObject, IsChecked = false }); } foreach (var item in matchingObjectsList.Where(x => !x.IsChecked).ToList()) { matchingObjectsList.Remove(item); CheckForAdjacentObjects(item.GameObject, matchingObjectsList); } return(matchingObjectsList.ToList()); }