public TypeConstrainedPool(DynamicPool <TT> .Creater creater) : base(creater) { #if UNITY_EDITOR if (typeof(TT) == typeof(UnityEngine.Object) || typeof(TT).IsSubclassOf(typeof(UnityEngine.Object))) { throw new Exception("Cannot create a GlobalPool of Unity Objects."); } #endif }
DynamicPool <EffectInstance> GetPoolFor(GameObject prefab) { if (prefab == null) { prefab = noPrefabDummy; } if (!prefabToEffectPool.ContainsKey(prefab)) { var pool = new DynamicPool <EffectInstance>(() => { var go = new GameObject("EFX"); var efx = go.AddComponent <EffectInstance>(); var visualRoot = GameObject.Instantiate(prefab); visualRoot.transform.parent = go.transform; efx.visualRoot = visualRoot.transform; efx.Setup(); efx.Reset(effect: null); efx.gameObject.SetActive(false); return(efx); }); pool.onFree = (EffectInstance efx) => { efx.Reset(effect: null); efx.transform.parent = instance.transform; efx.gameObject.SetActive(false); }; prefabToEffectPool[prefab] = pool; } return(prefabToEffectPool[prefab]); }