private IEnumerator DelayedReturnGameObject(object param) { DelayedReturnObjectWrapper wrapper = (DelayedReturnObjectWrapper)param; yield return(new WaitForSeconds(wrapper.Seconds)); // Only return the object if it's still active if (wrapper.Obj.activeInHierarchy) { // Reset the position and hide wrapper.Obj.SetActive(false); wrapper.Obj.transform.position = new Vector3(0, 0, 0); wrapper.Obj.transform.rotation = new Quaternion(0, 0, 0, 0); wrapper.Obj.transform.parent = this.transform; if (wrapper.Obj.rigidbody != null) { wrapper.Obj.rigidbody.velocity = new Vector3(); } if (this.pooledObjects.ContainsKey(wrapper.Name)) { // Put it back into the queue Queue <GameObject> availableObjects = this.pooledObjects[wrapper.Name]; lock (availableObjects) { availableObjects.Enqueue(wrapper.Obj); } } else { this.ReturnObjectNotFound++; } } }
public void ReturnGameObject(string name, GameObject obj, float waitForSeconds) { DelayedReturnObjectWrapper wrapper = new DelayedReturnObjectWrapper(name, obj, waitForSeconds); this.StartCoroutine("DelayedReturnGameObject", wrapper); }